聲明時指定最大元素個數,內存連續分配,適合已知上限的場景。
-- 類型定義
TYPE str_varray IS VARRAY(5) OF VARCHAR2(30);
-- 變量聲明並初始化
v_arr str_varray := str_varray('aa', 'bb', 'cc', 'dd', 'ee');
-- 遍歷
FOR i IN 1..v_arr.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(v_arr(i));
END LOOP;
-- 特性
v_arr.EXTEND; -- 擴展一個元素(不超過上限)
v_arr.TRIM; -- 移除末尾元素
v_arr.DELETE; -- 刪除所有元素
無上限、稀疏、鍵為 BINARY_INTEGER(或 PLS_INTEGER),適合動態鍵值對。
-- 類型定義
TYPE str_assoc IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
-- 變量聲明
v_arr str_assoc;
-- 賦值(下標可不連續、可負數)
v_arr(1) := 'aa';
v_arr(100) := 'bb';
v_arr(-5) := 'cc';
-- 遍歷(需用 FIRST/NEXT)
idx := v_arr.FIRST;
WHILE idx IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(v_arr(idx));
idx := v_arr.NEXT(idx);
END LOOP;
-- 常用方法
v_arr.EXISTS(n); -- 判斷下標是否存在
v_arr.COUNT; -- 當前元素數
v_arr.DELETE(n); -- 刪除指定下標
| 特性 | VARRAY | 關聯數組 |
|---|---|---|
| 最大長度 | 固定 | 無上限 |
| 稀疏支持 | 否 | 是 |
| 可存入表列 | 是 | 否(僅 PL/SQL) |
| SQL 中直接查詢 | 可用 TABLE() 轉換 | 不可 |
| 適用場景 | 定長列表、列存儲 | 緩存、查找表、動態集合 |
TYPE nt_type IS TABLE OF VARCHAR2(30);(無 INDEX BY)可存入數據庫列,支持 MULTISET 運算,屬於集合類型第三大類。