PLSQL记录类似语言中的结构struct,方便于处理单行多列数据,PLSQL记录是由一组相关的记录成员Field组成,记录就像是一个镜像,使用的话基本上就两种类型:
一、自定义的也就是自定义Field及类型,这种一般满足于单行多列不是全部的列 这种可以定义的记录类型可以在复合记录类型中使用,
TYPE EMP_RECORD_TYPE1 IS RECORD(自定义的Field
V_NAME VARCHAR2(20),
V_SAL NUMBER(6,3)
);
EMP_RECORD1 EMP_RECORD_TYPE1;
TYPE EMP_RECORD_TYPE2 IS RECORD(用原表的Field 这种在复合数据类型中不可
V_NAME EMP.ENAME%TYPE,
V_SAL EMP.SAL%TYPE
);
EMP_RECORD2 EMP_RECORD_TYPE2;
自定义的一般用在不是全表的列的时候
DECLARE
TYPE EMP_RECORD_TYPE2 IS RECORD(用原表的Field
V_NAME EMP.ENAME%TYPE,
V_SAL EMP.SAL%TYPE
);
EMP_RECORD EMP_RECORD_TYPE2;
BEGIN
SELECT ENAME,SAL INTO EMP_RECORD FROM EMP;
DBMS_OUTPUT.PUT_LINE(EMP_RECORD.V_NAME);
END;
二、通过%ROWTYPE属性可以基于表或者试图定义记录变量,此定义的记录变量,成员名与类型均与原表一模一样,如果只是单纯的处理某几列,那么应该使用自定义的记录类型和变量。
IDENTIFIER TABLE_NAME%rowtype;
IDENTIFIER VIEW_NAME%rowtype;
dept_record dept%ROWTYPE;
emp_record emp%ROWTYPE;
declare
type emp_cursor is select * from emp;
emp_record emp_cursor%ROWTYPE;
begin
open emp_cursor ;
loop
fetch emp_cursor into emp_record;
exit when emp_cursor%NOTFOUND;
dbms_output.put_line(emp_record.ename||emp_record.sal);
end loop;
close emp_cursor;
end;
三、如何将记录类型转换为对象类型
要知道PLSQL对象类型是需要创建的 as database object type;
create or replace type recordName_record as object
( column varchar2,
cloumu2 varchar2)
还可以做为object body使用
create or replace type body indiv_record as
constructor function indiv_record
( column varchar2,
column varchar2)
return self as result is
begin
self.column :=indiv_record.column;...
...
return;
----------------------------
define a variable of the record type;
recordNmaeobject recordName_record;
construct an intsance of the object type,
nameObject :=indiv_record(4);
以上就是定义了一个对象类型recordName_record 与 indiv_record对象定义了一个主体函数
本文转自 aklaus 51CTO博客,原文链接:http://blog.51cto.com/aklaus/1953390