使用记录类型¶
如果我们是在记录级别进行操作,我们可以避免对记录中单独字段的引用。
目前PL/SQL可以支持的记录级别的操作包括:
- 我们可以把一个记录赋给另一个记录,只要这些记录基于相同的记录类型(同一个自定义类型),或是兼容的%ROWTYPE记录类型(这些类型具有相同数量的字段,对应字段的数据类型相兼容)。
- 我们可以用赋值操作给记录赋一个NULL值。
- 我们可以通过INTO语句更新记录类型数据,当INTO目标中出现记录变量时,则INTO目标只能是单个的记录变量,不能有其他变量存在。
目前不支持的记录级别操作包括:
- 不能在参数列表中定义记录类型的参数。
- 函数返回值不能是记录类型。
- 不能对两个记录作比较,我们必须比较每一个字段才能对两个记录类型进行判断。
- 不能向数据库表插入(INSERT)或更新(UPDATE)一个记录类型。相反,我们必须把记录的每一个字段传递给每一列。如下示例说明了记录类型在一些DML语句中的用法。
示例:使用记录类型¶
-- 清理环境
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;
create table tab
(
a int,
b varchar2(10)
);
insert into tab values(1,'a');
insert into tab values(2,'b');
CREATE OR REPLACE PROCEDURE proc AS
declare
myrecord tab%rowtype;
begin
myrecord.a := 123;
myrecord.b := 'new';
--在RETURNING INTO语句中使用记录类型
update tab set a = 100 where a = 1
returning a,b into myrecord;
dbms_output.put_line( 'a:' || myrecord.a);
dbms_output.put_line( 'b:' || myrecord.b);
--在SELECT语句中使用记录类型
select * into myrecord from tab where a = 2;
dbms_output.put_line( 'a:' || myrecord.a);
dbms_output.put_line( 'b:' || myrecord.b);
end;
/
EXEC proc;
a:100
b:a
a:2
b:b
select * from tab;
A(int) |B(varchar) |
----------------------------
100 |a |
----------------------------
2 |b |
总数目:2
--删除
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;