天天看點

PLSQL記錄與ROWTYPE類型

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

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)

return self as result is 

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

繼續閱讀