首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 複合資料類型(四):集合操作全攻略——初始化、刪除、引用與記錄型集合構造

     編輯:Oracle 資料庫相關知識

集合兩大操作層面

  • 整體操作:直接使用集合名稱賦值、傳遞、比較。
  • 元素操作:collection(subscript) 存取單一元素。

下標特性對比

集合類型下標範圍稀疏性起始值
Index-by 表-2147483647 ~ 2147483647永遠稀疏任意整數
巢狀表1 起連續刪除後可稀疏1
VARRAY1 起連續永遠緊密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 直接複製所有元素(需相同型別)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved