集合兩大操作層面
- 整體操作:直接使用集合名稱賦值、傳遞、比較。
- 元素操作:
collection(subscript) 存取單一元素。
下標特性對比
| 集合類型 | 下標範圍 | 稀疏性 | 起始值 |
| Index-by 表 | -2147483647 ~ 2147483647 | 永遠稀疏 | 任意整數 |
| 巢狀表 | 1 起連續 | 刪除後可稀疏 | 1 |
| VARRAY | 1 起連續 | 永遠緊密 | 1 |
初始化規則
- Index-by 表:自動初始化,首次引用元素即建立。
- 巢狀表 / VARRAY:必須呼叫建構函數
type_name(val1, val2, ...),未初始化為 NULL(原子性 NULL),不可直接引用元素。
程式碼範例
Index-by 表自動初始化
DECLARE
TYPE symbol_tab_typ IS TABLE OF VARCHAR2(5) INDEX BY BINARY_INTEGER;
symbol_tab symbol_tab_typ;
BEGIN
symbol_tab(1) := 'ORCL'; -- 直接賦值即初始化
symbol_tab(-3) := 'IBM';
END;
巢狀表與 VARRAY 建構函數初始化
DECLARE
TYPE stock_list IS TABLE OF VARCHAR2(10);
TYPE top10_list IS VARRAY(10) OF VARCHAR2(10);
biotech stock_list;
tech10 top10_list;
BEGIN
biotech := stock_list('AMGN','BGEN','IMCL','GERN','CRA'); -- 5 元素
tech10 := top10_list('ORCL','CSCO','MSFT','INTC','SUNW','IBM',NULL,NULL);
IF tech10(7) IS NULL THEN tech10(7) := 'CPQ'; END IF;
tech10(8) := 'DELL';
END;
記錄型集合初始化
DECLARE
TYPE quote_rec IS RECORD (sym VARCHAR2(10), bid NUMBER, ask NUMBER, vol NUMBER := 0);
TYPE quote_tab IS TABLE OF quote_rec;
qlist quote_tab;
qrec quote_rec;
BEGIN
qrec.sym := 'ORCL'; qrec.bid := 100; qrec.ask := 101; qrec.vol := 25000;
qlist := quote_tab(qrec); -- 傳入整筆記錄
-- qlist := quote_tab('CSCO',75,76,3210000); -- 錯誤:不可拆解欄位傳入
DBMS_OUTPUT.PUT_LINE(qlist(1).bid);
END;
刪除與指派
DELETE(collection, subscript) 刪除指定元素(巢狀表變稀疏,VARRAY 不支援)。
collection := NULL 將整個集合設為原子性 NULL。
- 集合間指派
target := source 直接複製所有元素(需相同型別)。