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

Oracle 複合資料類型(一):記錄型別定義與隱式/顯式宣告完整教學

     編輯:Oracle 資料庫相關知識

記錄型別定義兩種方式

1. 顯式定義 (TYPE ... IS RECORD)

DECLARE
  TYPE stock_quote_rec IS RECORD (
    symbol    stock.symbol%TYPE,
    bid       NUMBER(10,4),
    ask       NUMBER(10,4),
    volume    NUMBER NOT NULL := 0,
    exchange  VARCHAR2(6) DEFAULT 'NASDAQ'
  );
  r_quote stock_quote_rec;  -- 宣告變數
BEGIN ... END;
  • 欄位定義:field_name data_type [NOT NULL] [:=|DEFAULT expr]
  • 欄位可為標量、記錄、%TYPE 參考資料庫欄位型別。
  • 使用 %TYPE 參考資料庫欄位,編譯期自動同步型別與長度,維護性最佳。

2. 隱式定義 (%ROWTYPE)

DECLARE
  acct_rec accounts%ROWTYPE;                    -- 參考資料表/視圖
  CURSOR c_txn(p_acct VARCHAR2) IS SELECT action, ts, holding FROM portfolios WHERE account_nbr=p_acct;
  txn_rec c_txn%ROWTYPE;                        -- 參考游標
BEGIN ... END;
  • 無需列出欄位,自動對應資料表/游標結構。
  • 若資料表結構變更,重新編譯即自動同步,極具彈性。
  • 游標 FOR 迴圈、觸發器 :OLD/:NEW 隱含使用 %ROWTYPE。

隱式定義實戰範例

DECLARE
  CURSOR c_txn IS SELECT action, ts, holding FROM portfolios WHERE account_nbr='37';
BEGIN
  FOR r_txn IN c_txn LOOP
    IF r_txn.holding = 'ORCL' THEN notify_shareholder; END IF;
  END LOOP;
END;

選擇建議

場景建議方式
需自訂欄位、預設值、NOT NULL、多層記錄顯式 TYPE IS RECORD
直接對應資料表/視圖/游標結構,追求維護彈性隱式 %ROWTYPE
觸發器、游標 FOR 迴圈隱式 (系統自動)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved