首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle PL/SQL 數組類型詳解:VARRAY 與關聯數組

     編輯:Oracle 教學

1. 定長數組

聲明時指定最大元素個數,內存連續分配,適合已知上限的場景。

-- 類型定義
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;      -- 刪除所有元素

2. 關聯數組

無上限、稀疏、鍵為 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);   -- 刪除指定下標

3. 選型指南

特性VARRAY關聯數組
最大長度固定無上限
稀疏支持否是
可存入表列是否(僅 PL/SQL)
SQL 中直接查詢可用 TABLE() 轉換不可
適用場景定長列表、列存儲緩存、查找表、動態集合

4. 進階:嵌套表類型

TYPE nt_type IS TABLE OF VARCHAR2(30);(無 INDEX BY)可存入數據庫列,支持 MULTISET 運算,屬於集合類型第三大類。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved