•複合組合變數也叫做組合變數,在複合變數中包括多個內部組件,每個組件都可以單獨存放值,
因此一個複合變數可以存放多個值。
•複合變數類型不是資料庫中已經存在的資料類型,因此複合變數在宣告類型之前,首先要先建立複合類型,
複合類型建立後可以多次使用,以便定義多個複合變數。
複合資料型別包括:
-記錄
-表
-巢狀表格
-數組
記錄是由一組相關的資料項目組成的邏輯單元,每一個資料項目都有自己的名字和資料類型。
表是資料的集合,可將表中的資料作為一個整體進行引用和處理。
表由列和關鍵字組成,其中通過關鍵字可成組地訪問行。
一經定義,記錄和表都可重複使用。
PL/SQL 記錄
•記錄是儲存在多個欄位中的一組相關的資料項目,每個欄位都有自己的名字和資料類型。
•把欄位的集合當作一個整體的邏輯單元
•主要用於從表中取出查詢到的行資料
記錄的特點:
• 每個記錄內都可以有許多欄位。
• 可以為記錄賦初值,同時可用NOT NULL來限定記錄
• 無初始值的欄位定義為NULL • 在定義欄位時也可以使用保留字DEFAULT
• 可以在任意一個塊、子程式或包的聲明部分定義RECORD類型並聲明使用者自訂的記錄
• 可以聲明並引用嵌套的記錄,一個記錄可以是其他記錄的組件
文法:
TYPE type_name IS RECORD<br />(field_declaration[, field_declaration]…);
其中field_declaration:
field_name {field_type | variable%TYPE<br />| table.column%TYPE | table%ROWTYPE}<br />[[NOT NULL] {:= | DEFAULT} expr]
TYPE emp_record_type IS RECORD<br /> (empno emp.empno%type,<br /> ename emp.ename%type,<br /> job varchar2(9));<br />emp_record emp_record_type ;<br />
賦值可以使用點號引用記錄中的欄位
record_name.field_name
%ROWTYPE
屬性
•聲明的變數對應於資料庫表或視圖中列的集合
•在%ROWTYPE 之前加上資料庫表名
•記錄內欄位的名字和資料類型參照表或視圖中的列
DECLARE<br /> emp_record emp%rowtype;<br /> ….<br /> emp_record.ename=‘ljs’;<br /> emp_record.sal=3000;<br /> SELECT * INTO emp_record<br /> FROM emp<br /> WHERE ……;
%ROWTYPE的優點:
•可以不必知道資料庫中列的數量和類型。
•在運行期間,資料庫中列的數量和類型可能發生變化。
•在SELECT語句中使用該屬性可以有效地檢索表中的行
建立 PL/SQL
表
TYPE type_name IS TABLE OF<br /> {column_type | variable%TYPE<br /> | table.column%TYPE} [NOT NULL]<br /> [INDEX BY BINARY_INTEGER];<br />identifier type_name;
DECLARE<br /> TYPE ename_table_type IS TABLE OF emp.ename%TYPE<br /> INDEX BY BINARY_INTEGER;<br /> TYPE hiredate_table_type IS TABLE OF DATE<br /> INDEX BY BINARY_INTEGER;<br /> ename_table ename_table_type;<br /> hiredate_table hiredate_table_type;<br />BEGIN<br /> ename_table(1) := 'CAMERON';<br /> hiredate_table(8) := SYSDATE + 7;<br /> IF ename_table.EXISTS(1) THEN<br /> INSERT INTO ...<br /> ...<br />END;
表方法: