集合被稱為具有相同數據類型的有序元素組。所有元素都由表示其在集合中的位置的唯一下標標識。
PL/SQL提供了三種集合類型:
- 按表或關聯數組索引
- 嵌套表
- 可變大小的數組或Varray
索引的表
它也被稱為關聯數組,被稱為鍵值對。這個鍵是唯一的,用於定位相應的值。Key可以是整數,也可以是字符串。該表使用以下語法創建。
TYPE type_name IS TABLE OF element_type [NOT NULL]
table_name type_name;示例:DECLARE CURSOR t_teachers is select name from teachers;TYPE t_list是教師表。索引類型name_list t_list;計數器整數:=0;BEGIN FOR n IN t_teachers LOOP counter:= counter +1;Name_list (counter):= n.name;dbms_output.put_line('老師(' | |計數器| |”):“| | name_list(櫃台));結束循環; END; / Output: teacher(1): Ranjitha teacher(2): sai teacher(3): shakthi teacher(4): gayathri teacher(5): vignesh PL/SQL procedure successfully completed
嵌套表
這就像一個一維數組,有任意數量的元素。嵌套表與數組的不同之處在於:
- 當數組聲明了元素個數,但嵌套表沒有時。然後表的大小會動態增加。
- 數組被稱為總是密集的,即有連續的下標。嵌套數組最初被認為是密集的,但當元素從其中刪除時,它就會變得稀疏。
一個嵌套表可以通過使用下麵的語法創建:
語法:TYPE type_name IS TABLE OF element_type [NOT NULL];Table_name類型名稱;聲明被稱為INDEX - BY的聲明,但沒有INDEX BY子句。該表可以存儲在數據庫列中。示例:DECLARE CURSOR t_teachers is SELECT name FROM teachers;TYPE t_list是所有教師的表。t_list:= c_list();計數器整數:=0;BEGIN FOR n IN t_teachers LOOP counter:= counter +1;name_list.extend; name_list(counter) := n.name; dbms_output.put_line('teacher('||counter||'):'||name_list(counter)); END LOOP; END; / Output: teacher(1): Ranjitha teacher(2): sai teacher(3): shakthi teacher(4): gayathri teacher(5): vignesh PL/SQL procedure successfully completed
收集方法
下麵給出了使使用集合更容易的集合方法。
- EXISTS(n)——如果集合中的第n個元素存在,則返回true,否則返回false。
- COUNT——返回集合當前包含的元素數量。
- LIMIT -它檢查集合的最大大小。
- FIRST -它返回集合中使用整數下標的最小索引號的第一個。
- LAST——它返回使用整數下標的集合中最大的下標數。
- PRIOR(n)——返回集合中索引n之前的索引號。
- NEXT(n)——返回繼索引n之後的索引號。
- EXTEND—它將一個空元素追加到一個集合。
- EXTEND(n)——向集合中添加n個空元素。
- EXTEND(n, i)——它將第i個元素的n個副本追加到一個集合。
- TRIM—從集合末尾刪除一個元素。
- TRIM(n)——從集合末尾刪除n個元素。
- DELETE—從集合中刪除所有元素,將COUNT設置為0。
- DELETE(n)——從帶有數字鍵的關聯數組或嵌套表中刪除第n個元素。如果n為空,則該方法不執行任何操作。
- DELETE(M, N) -從關聯數組或嵌套表中刪除M .. N範圍內的所有元素。如果m大於n,或者m或n為空,DELETE(m,n)什麼都不做。
收集異常
以下是異常情況及其被引發的時間:
- COLLECTION_IS_NULL—當我們嚐試自動操作空集合時。
- NO_DATA_FOUND—下標,指定被刪除的元素,或關聯數組中不存在的元素。
- SUBSCRIPT_BEYOND_COUNT—下標超過集合中的元素數量。
- SUBSCRIPT_OUTSIDE_LIMIT -表示下標在允許範圍之外。
- VALUE_ERROR——下標是空的,或者是不能轉換為鍵類型的下標。隻有當鍵的定義像PLS_INTEGER range那樣,並且下標在這個範圍之外時,才會發生這種情況。