PL/SQL

SQL语言的全称是结构化查询语言。(structure query language)
PL/SQL语言是结构化程序设计语言。
快(block)是PL/SQL程序的最基本的结构。主要有以下几部分构成:

declare--标记声明部分
begin--标记程序体部分开始
exception--标记异常处理部分开始
end--标记程序体部分结束

eg:
1:
set serveroutput on;--命令设置环境变量serveroutput 为打开状态,从而使能够在sql*plus中输出结果
begin
dbms_output.put_line('XXXX');--可以输出参数的值(不能打印布尔类型的值)
end;
2:
declare                                        declare
v-name varchar2(20);                           v_num number :=0;
begin                                begin                          
v_name :='myname';                      v_num =2/ v_num ;   
dbms_output.put_line(v_name);          dbms_output.put_line(v_num);
end                                     exception
                                        when others then
                                      dbms_output.put_line('error');
                                          end;
1:变量的声明
             命名的规则
             变量的类型:binary _interger  整数值,主要用来计数
                         boolean    布尔类型,可以为true/false/null
2:复合数据变量定义
%type
    %type提供一种利用其它变量的数据类型(or数据表中列出的数据类型)来定义变量的方法。
格式如下:
          变量名   (已被定义的)变量名%type;
or
         变量名    数据表名。列名%type;


复合数据变量1:record(有点类似于类)

declare
type type_record is record
(
    deptno dept.deptno%type,
    dname  dept.dname%type,
    loc   dept.loc%type
);
v_temp  type_record ;
begin
v_temp.deptno :=50;
v_temp.dname  :='aaa';
.............
end;


%rowtype
declare
v_temp dept%rowtype;
begin
v_temp.deptno :=50;
v_temp.dname  :='aaaa';
..........
end;


利用%rowtype也可以实现和上述record一样的功能。因为%rowtype是定义的变量获得整个记录的数据类型。
其定义格式为:
              变量名  数据表名%rowtype

复合数据变量2:
table类型  (类似于数组)
eg:

declare
type type_table_emp_empno is table of emp.empno%type index by binary_interger;
v_empnos  type_table_emp_empno;
begin
v_empnos(0) :=XXXX;
v_empnos(2) :=XXXX;
v_empnos(-1) :=XXXX;
dbms_output.put_line(v_empnos(-1));
end;
--相当于定义了一个数组

3:SQL语句在PL/SQL里面的运用
1:在PL/SQL里面使用 select,必须返回一条记录(有且仅有一条)。
eg:
declare
v_name emp.ename%type;
v_sal  emp.sal%type;
begin
select ename,sal into v_name,v_sal from emp where empno=7369;--返回一条记录(而且必须用到into)
end;


declare
v_temp emp%rowtype;
begin
select * into v_temp from emp where empno=7369;
end;

2:
   insert into xxx values('xxx');
   commit;提交
3:
  update emp set sal=sal/2 where deptno=v_deptno;
  select count(*) into v_count from emp;
  dbms_output.put_line(sql%rowcount||'条记录被影响');
  commit;
  


























你可能感兴趣的:(pl/sql)