Oracle_学习开发子程序_复合数据类型一(PL/SQL记录)

为了简化单行多列数据的处理,可以使用PL/SQL记录;为了保留并处理多行当列的数据,可以使用索引表、嵌套表和varray;为了处理多行多列的数据,应该使用PL/SQL记录表。
[b]一、PL/SQL记录[/b]
PL/SQL记录有益于处理单行多列的数据,当使用PL/SQL记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量。
1、自定义PL/SQL记录
当使用自定义的PL/SQL记录时,需要分别自定义PL/SQL记录类型和记录变量。定义记录类型和记录变量的语法如下:
  type type_name is record(
field_declaration1,
field_declaration2,
..................,
);
identifier type_name;

如上所示,type_name用于指定自定义记录类型名称(is record表示记录类型);field_declaration1、field_declaration2用于指定记录成员的定义;identifier用于指定记录变量名,当为记录类型指定多个成员时,记录成员之间用逗号隔开,示例如下:
declare
type emp_record_type is record(
v_name emp.name%type,
v_address emp.address%type
);
emp_record emp_record_type;

[b]2、使用%rowtype属性定义记录变量[/b]
%rowtype属性可以基于表或视图定义记录变量,当使用该属性定义记录变量时,记录成员名称和类型与表或视图列的名称和类型完全相同,为了简化表或视图所有列数据的处理,应当使用该属性定义记录变量,使用%rowtype定义变量的语法如下:
identifier table_name%rowtype;

identifier view_name%rowtype;
当使用%rowtype属性定义记录变量时,记录成员个数、名称、类型与表或视图列个数、名称、类型完全相同,示例如下:
dept_record dept%rowtype;
view_record view%rowtype;
[b]3、使用PL/SQL记录[/b]
[b](1)、在select into语句中使用PL/SQL记录[/b]
select into语句用于检索单行数据,如果选择列表包含多个列或表达式,如果使用PL/SQL记录用于接收数据,从而简化了数据处理,当select into语句中使用PL/SQL记录时,即可以直接使用记录变量,也可以使用记录成员。
[b]示例一、在select into 语句中使用记录变量[/b]
当在select into 语句中直接使用记录变量时,选择列表中的列和表达式的顺序、个数类型必须要与记录成员的顺序、个数、类型完全匹配,示例如下:

declare
type temp_record_type is record(
v_name cip_temps.NAME%type,
v_address cip_temps.ADDRESS%type,
v_age cip_temps.AGE%type,
v_id cip_temps.ID%type
);
temp_record temp_record_type;
begin
select name,address,age,id into temp_record from cip_temps where id=6;
dbms_output.put_line(temp_record.v_name||':'||temp_record.v_address||':'||temp_record.v_age||':'||temp_record.v_id);
end;

在引用记录成员时必须要用记录变量.记录成员。
[b]示例二、在select into 语句中使用记录成员[/b]

declare
type temp_record_type is record(
v_name cip_temps.NAME%type,
v_address cip_temps.ADDRESS%type,
v_age cip_temps.AGE%type,
v_id cip_temps.ID%type
);
temp_record temp_record_type;
begin
select name,address,age,id into temp_record.v_name,temp_record.v_address,temp_record.v_age,temp_record.v_id from cip_temps where id=6;
dbms_output.put_line(temp_record.v_name||':'||temp_record.v_address||':'||temp_record.v_age||':'||temp_record.v_id);
end;

[b](2)、在insert语句中使用PL/SQL记录[/b]
在oracle9i之前,如果使用PL/SQL记录插入数据,只能使用记录成员,在oracle9i开始,可以使用记录变量,由于插入数据时,列的顺序、个数、类型必须要与记录成员的顺序、个数、类型完全匹配,所示使用%rowtype
示例一、在values中使用PL/SQL记录变量

declare
temp_record_rowtype cip_temps%rowtype;
begin
temp_record_rowtype.name:='11';
temp_record_rowtype.age:='11';
temp_record_rowtype.address:='11';
temp_record_rowtype.id:=200;
insert into cip_temps values temp_record_rowtype;
end;

示例二、在values中使用PL/SQL记录成员

declare
temp_record_rowtype cip_temps%rowtype;
begin
temp_record_rowtype.name:='11';
temp_record_rowtype.age:='11';
temp_record_rowtype.address:='11';
temp_record_rowtype.id:=200;
insert into cip_temps values temp_record_rowtype;
end;

[b](3)、update、delete语句同insert语句,示例省略。[/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值