定义和声明记录

记录变量是由不同的类型的内部成员构成的复合变量。记录变量的值以及记录变量成员的值均可以改变。

可以通过记录变量的名称对该记录进行引用。通过record.field来引用记录的成员。

可以通过如下任一方式创建记录变量:

定义记录类型并声明该类型的变量。

通过%ROWTYPE声明代表数据库表或视图全部或部分行的记录变量。

通过%TYPE声明和已经声明的记录变量类型相同的记录变量。

语法:

record_type_definition ::=

field_definition ::=

record_variable_declaration ::=

rowtype_attribute ::=

说明:

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;