oracle存储过程2

       PL/SQL记录(record)主要用于处理单行多列数据。当使用RECORD时,既可以自定义记录的类型和变量,也可以使用%ROWTYPE属性定义记录变量。

   TYPE type_name IS RECORD
   (
         field_declaration,...
   );

      自定义记录类型,type_name用于指定记录类型的名称,field_declaration用于定义记录成员。

   declare
   type type_parm is record
   (
       lst_date com_sys_parm.lst_date%type,
       sys_date  com_sys_parm.sys_date%type
   );
   sys_parm type_parm;
   begin
            select lst_date,sys_date into sys_parm from com_sys_parm;
            dbms_output.put_line(sys_parm.lst_date);
            dbms_output.put_line(sys_parm.sys_date);
   end;
   identifier [table_name | view_name]%ROWTYPE;

       使用%ROWTYPE属性定义记录变量,identifier用于指定记录变量的名称,table_name用于指定表名,view_name用于指定视图名。

   declare
            sys_parm com_sys_parm%rowtype;
   begin
            select * into sys_parm from com_sys_parm;
            dbms_output.put_line(sys_parm.lst_date);
            dbms_output.put_line(sys_parm.sys_date);
   end;

      PL/SQL表(table)是Oracle早期版本用于处理PL/SQL集合的数据类型,表的下标可以为负值,并且元素个数无限制,不可以作为表列的数据类型使用。

   TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY key_type;

      type_name用于指定表类型的名称,element_type用于指定表的数据类型,NOT NULL表示不允许引用NULL元素,key_type用于指定表下标的数据类型(BINARY_INTEGER、PLS_INTEGER或VARCHAR2)。

  declare
            type type_item is table of com_item%rowtype index by binary_integer;
            it type_item;
  begin
            select * bulk collect into it from com_item;
            dbms_output.put_line(it(1).acc_no||','||it(1).acc_name);
  end;
     从Oracle DataBase 9i开始,允许使用varchar2定义表的下标。当使用varchar2定义下标时,会按照下标值的升序方式确定元素顺序。
  declare
            type tbl_type is table of nvarchar2(30) index by varchar2(20);
            tbl tbl_type;
  begin
            tbl('cat'):=1;
            tbl('dog'):=2;
            tbl('man'):=3;
            tbl('pig'):=4;
            dbms_output.put_line('第一个元素:'||tbl(tbl.first));
            dbms_output.put_line('最后一个元素:'||tbl(tbl.last));
            dbms_output.put_line('dog对应的元素:'||tbl('dog'));
            dbms_output.put_line('man对应的元素:'||tbl('man'));
   end;

     PL/SQL 嵌套表(table)用于处理PL/SQL集合的数据类型,表的下标以1开始,并且元素个数无限制,可以作为表列的数据类型使用。   

  TYPE type_name IS TABLE OF element_type;
     type_name用于指定嵌套表类型的名称,element_type用于指定嵌套表的数据类型。使用嵌套表时,需要使用其构造方法初始化嵌套表变量。
    
  declare
            type type_item is table of com_item%rowtype;
            item_table type_item;
            v_count integer;
            i integer;
  begin
            select count(*) into v_count from com_item;
            select * bulk collect into item_table from com_item;
            i:=1;
            loop
            insert into com_item_bk(acc_no,acc_name) values(item_table(i).acc_no,item_table(i).acc_name);
            i:=i+1;
            exit when i>v_count;
            end loop;
   end;

    PL/SQL 数组(VARRAY)用于处理PL/SQL集合的数据类型,表的下标以1开始,并且元素个数有限制,可以作为表列的数据类型使用。

  TYPE type_name IS VARRAR(size_limit) OF element_type [NOT NULL];

    type_name用于指定VARRAY类型的名称,size_limit用于指定VARRAY 元素的最大个数,element_type用于指定元素的数据类型。使用VARRAY时,需要使用其构造方法初始化VARRAY元素。

  declare 
            type acc_varr_type is varray(20) of com_item.acc_no%type;
            acc_varr acc_varr_type;
   begin
            select acc_no bulk collect into acc_varr from com_item where rownum<=20;
            dbms_output.put_line('科目号:'||acc_varr(1));
            dbms_output.put_line('科目号:'||acc_varr(2));
   end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值