oracle存储过程定行记录类型,oracle存储过程2

本文详细介绍了Oracle PL/SQL中的记录(record)类型和集合数据类型,包括如何自定义记录类型,使用%ROWTYPE属性,以及PL/SQL的表(table)、嵌套表和VARRAY的用法。示例代码展示了如何操作这些数据类型来处理单行多列数据和集合数据。
摘要由CSDN通过智能技术生成

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、付费专栏及课程。

余额充值