PL/SQL集合類型是類似於高級語言數組的一種符合數據類型,集合類型包括索引表(PL/SQL 表)、嵌套表(Nested Table)和變長數組(VARRAY)3種類型。
1.索引表
索引表也成爲PL/SQL表,用於處理PL/SQL數組的數據類型。但是索引表與高級語言的數組使用區別的:高級語言數組的元素個數是有限制的,並且下標不能爲負值;而索引表的元素個數沒有限制,並且下標可以爲負值。
定義索引表的語法如下:
TYPE type_name IS TABLE OF element_type
[NOT NULL] INDEX BY key_type;
identifier type_name;
其中各參數的含義如下:
type_name 用於指定用戶自定義數據類型的名稱
element_type 用於指定索引表元素的數據類型
NOT NULL 表示不允許引用NULL元素
key_type 用於指定索引表元素下標的數據類型
identifier 用於定義索引表變量
1.1 在索引表中使用BINARY_INTEGER和PLS_INTEGER
下面這個例子首先定義一個索引表類型,其中指定索引表下標的數據類型爲BINARY_INTEGER,然後定義一個索引表類型的變量用於存儲EMP表中ENAME的列值。
示例如下:
SQL> DECLARE
TYPE ename_table_type IS TABLE OF emp.name%TYPE
INDEX BY BINARY_INTEGER;--指定索引表元素下標的數據類型爲BINARY_INTEGER
ename_table ename_table_type;
Begin
Select ename Into ename_table(-1) From emp Where empno=7788;
DBMS_OUTPUT.PUTLINE('僱員號爲7788的僱員名爲'||ename_table(-1));
End;
1.2 在索引表中使用VARCHAR2
在定義索引表時,不僅允許使用BINARY_INTEGER和PLS_INTEGER作爲元素下標的數據類型,也允許使用VARCHAR2下標,可以在元素下標和元素值之間建立關聯,
示例如下:
SQL> DECLARE
TYPE area_table_type IS TABLE OF emp.name%TYPE INDEX BY VARCHAR2(10);--指定索引表元素下標的數據類型爲
area_table ename_table_type;
Begin
area_table('北京') :=1;
area_table('上海') :=2;
area_table('蘇州') :=3;
End;