要使用集合,我們首先要創建集合類型,然後聲明該類型的變量。我們可以在任何PL/SQL塊、子程序或包的聲明部分使用TABLE和VARRAY類型。
集合的作用域和初始化規則同其他類型和變量一樣。在一個塊或子程序中,當程序進入塊或子程序時集合被初始化,退出時銷燬。在包中,集合在我們第一次引用包的時候初始化,直至會話終止時才銷燬。
· 嵌套表
對於嵌套表,可以使用下面的語法來進行定義:
TYPE type_name IS TABLE OF element_type [NOT NULL]; |
其中type_name是在集合聲明使用的類型標識符,而element_type可以是除了REF CURSOR類型之外的任何PL/SQL類型。對於使用SQL聲明的全局嵌套表來說,它的元素類型受到一些額外的限制。以下幾種類型是不可以使用的:
1. BINARY_INTEGER, PLS_INTEGER
2. BOOLEAN
3. LONG, LONG RAW
4. NATURAL, NATURALN
5. POSITIVE, POSITIVEN
6. REF CURSOR
7. SIGNTYPE
8. STRING
· 變長數組
對於變長數組類型,可以使用下面的語法進行定義:
TYPE |
type_name和element_type的含義與嵌套表相同。size_limit是正整數,代表數組中最多允許存放元素的個數。在定義VARRAY時,我們必須指定它的長度最大值。下例中,我們定義了一個存儲366個DATE類型的VARRAY:
DECLARE |
· 關聯數組
對於關聯數組,可以使用下面的語法進行定義:
TYPE type_name IS TABLE OF element_type [NOT NULL] |
key_type可以是BINARY_INTEGER或PLS_INTEGER,也可以是VARCHAR2或是它的子類型VARCHAR、 STRING或LONG。在用VARCHAR2做鍵的時候,我們必須指定VARCHAR2的長度,但這裏不包括LONG類型,因爲LONG等價於 VARCHAR2(32760)。而RAW、LONG RAW、ROWID、CHAR和CHARACTER都是不允許作爲關聯數組的鍵的。在引用一個使用VARCHAR2類型作爲鍵的關聯數組中的元素時,我們還可以使用其他類型,如DATE或TIMESTAMP,因爲它們自動地會被TO_CHAR函數轉換成VARCHAR2。索引表可以使用不連續的鍵作下標索引。如下例中,索引表的下標是7468而不是1:
DECLARE |
1、定義與PL/SQL集合類型等價的SQL類型
要把嵌套表或變長數組存到數據表中,我們必須用CREATE TYPE來創建SQL類型。SQL類型可以當作數據表的字段或是SQL對象類型的屬性來使用。
我們可以在PL/SQL中聲明與之等價的類型,或在PL/SQL變量聲明時直接使用SQL類型名。
· 嵌套表的例子
下面的SQL*Plus腳本演示瞭如何在SQL中創建嵌套表,並把它作爲對象類型的屬性來使用:
CREATE TYPE CourseList AS TABLE OF VARCHAR2(10) -- define type |
標識符courses代表整張嵌套表,courses中的每個元素存放一個大學課程的代號,如"Math 1020"。
· 變長數組的例子
下面的腳本創建了能夠存儲變長數組的數據庫字段,其中每個元素包含一個VARCHAR2類型值:
-- Each project has a 16-character code name. |