为了简化单行多列数据的处理,可以使用PL/SQL记录;为了保留并处理多行当列的数据,可以使用索引表、嵌套表和varray;为了处理多行多列的数据,应该使用PL/SQL记录表。
一、PL/SQL记录
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;
2、使用%rowtype属性定义记录变量
%rowtype属性可以基于表或视图定义记录变量,当使用该属性定义记录变量时,记录成员名称和类型与表或视图列的名称和类型完全相同,为了简化表或视图所有列数据的处理,应当使用该属性定义记录变量,使用%rowtype定义变量的语法如下:
identifier table_name%rowtype;
或
identifier view_name%rowtype;
当使用%rowtype属性定义记录变量时,记录成员个数、名称、类型与表或视图列个数、名称、类型完全相同,示例如下:
dept_record dept%rowtype;
view_record view%rowtype;
3、使用PL/SQL记录
(1)、在select into语句中使用PL/SQL记录
select into语句用于检索单行数据,如果选择列表包含多个列或表达式,如果使用PL/SQL记录用于接收数据,从而简化了数据处理,当select into语句中使用PL/SQL记录时,即可以直接使用记录变量,也可以使用记录成员。
示例一、在select into 语句中使用记录变量
当在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;
在引用记录成员时必须要用记录变量.记录成员。
示例二、在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.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;
(2)、在insert语句中使用PL/SQL记录
在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记录成员