定义和声明记录¶
记录变量是由不同的类型的内部成员构成的复合变量。记录变量的值以及记录变量成员的值均可以改变。
可以通过记录变量的名称对该记录进行引用。通过record.field来引用记录的成员。
可以通过如下任一方式创建记录变量:
定义记录类型并声明该类型的变量。
通过%ROWTYPE声明代表数据库表或视图全部或部分行的记录变量。
通过%TYPE声明和已经声明的记录变量类型相同的记录变量。
语法:
field_definition ::=
record_variable_declaration ::=
说明:
record_type_definition
record_type:即将定义的记录的名称。
field_definition
field:成员的名称。
datatype:所定义的成员的数据类型,目前只支持标量类型,如int、varchar等。不支持复杂类型,如记录类型、自定义类型、集合类型、行类型等。
NOT NULL:约束所定义的成员非空。
expression:记录每个字段的默认值表达式。
record_variable_declaration
record_1:即将声明的记录变量名称。
record_type:之前所定义的记录类型名称。表示record_1的数据类型。
record_2:之前声明的记录变量名称。
rowtype_attribute
explicit_cursor:显示游标的名称。对于通过和该显示游标相关联的查询语句所选择的每一列,记录中都有和该列相同名字和数据类型的成员。
cursor_variable:强类型游标变量名称。对于通过和游标变量相关联的查询语句所选择的每一列,记录中都有和该列相同名字和数据类型的成员。
db_table_or_view:在声明激活时能够被访问的数据库表和视图的名称。对于该表或视图的每一列,记录中都有和该列相同名字和数据类型的成员。
示例:定义和声明记录¶
-- 清理环境
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;
create table tab
(
a int,
b varchar(10)
);
insert into tab values(1,'hello');
create or replace procedure proc() as
declare
TYPE d_type IS RECORD
(
a int,
b varchar(10)
);
var d_type;
begin
var.a = 100;
var.b = 'hello';
dbms_output.put_line( 'a:' || var.a);
dbms_output.put_line( 'b:' || var.b);
end;
/
exec proc();
a:100
b:hello
--删除
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;