復合類型
復合類型可以存儲多個值,包括記錄和集合。集合是一維的,但是可以在集合中放入其它集合,變成多維集合。集合又分為索引表、嵌套表和變長數組三種。要使用集合,我們首先要創建集合類型,然後聲明該類型的變量。我們可以在任何PL/SQL塊、子程序或包的聲明部分使用TABLE和VARRAY關鍵字來聲明集合類型。集合的作用域和同其他類型變量一樣,在一個塊或子程序中,當程序進入塊或子程序時有效,退出時失效。在包中,集合在我們第一次引用包的時候有效,直至會話終止時才失效。
一、記錄
記錄可以包括多個成員,從而可以保存多個值。記錄中的成員的數據類型可以不同。記錄在使用時必須先聲明記錄類型,然後定義記錄變量,最後才能在PL/SQL中使用。
示例1:
DECLARE
TYPE MyRecord IS RECORD(
name VARCHAR2(10),
age SMALLINT
);
mr MyRecord;
BEGIN
mr.name:='zhangsan';
mr.age:=20;
DBMS_OUTPUT.PUT_LINE('姓名:'||mr.name||' 年齡:'||mr.age);
END;
示例2: DECLARE
TYPE MyRecord IS RECORD(
no NUMBER(2),
name VARCHAR2(14),
city scott.dept.loc%TYPE
);
deptRecord MyRecord ;
BEGIN
--SELECT 語句後列的數目與記錄中的變量數目相同
SELECT deptno,dname,loc into deptRecord FROM DEPT WHERE DEPTNO=30;
DBMS_OUTPUT.PUT_LINE(deptRecord.no||':'||deptRecord.name||':'||deptRecord.city);
END;
示例3:
DECLARE
TYPE MyRecord IS RECORD(
no NUMBER(2),
name VARCHAR2(14),
city scott.dept.loc%TYPE
);
deptRecord MyRecord;
BEGIN
--SELECT 語句後列的數目少於記錄中的變量數目
SELECT dname,loc INTO deptRecord.name,deptRecord.city FROM DEPT WHERE DEPTNO=30;
deptRecord.no:=30;
DBMS_OUTPUT.PUT_LINE(deptRecord.no||':'||deptRecord.name||':'||deptRecord.city);
END;
示例4:
DECLARE
--特殊定義記錄方式,記錄中變量的類型與dept表行的類型相同
deptRecord dept%ROWTYPE;
BEGIN
SELECT * INTO deptRecord FROM DEPT WHERE DEPTNO=30;
DBMS_OUTPUT.PUT_LINE(deptRecord.deptNo||':'||deptRecord.dname||':'||deptRecord.loc);
END;