Oracle 將一個查詢結果值動態賦值給一個變量


在寫存儲過程或函數時,經常需要用到中間變量,需要將一些值做臨時存儲。

可以通過動態變量方式來賦值。如下:

FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2)
   RETURN NCLOB
IS
   PRAGMA AUTONOMOUS_TRANSACTION;
   MID_ID NUMBER (19);                                                --中間變量
BEGIN
   SELECT ID
     INTO MID_ID
     FROM TABLE1
    WHERE A = 1;
END;

以上語句在條件A=1滿足時,能夠成功賦值給變量MID_ID,但如果沒有查詢到值時,該語句在執行時會報錯(因為未查詢到值)

可以在查詢值外加入MAX()  或 MIN() 如下處理:

FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2)
   RETURN NCLOB
IS
   PRAGMA AUTONOMOUS_TRANSACTION;
   MID_ID   NUMBER (19);                                                --中間變量
BEGIN
   SELECT MAX(ID)
     INTO MID_ID
     FROM TABLE1
    WHERE A = 1;
END;

如果條件A=1不滿足時,會返回一個空值,不會出現報錯情況。這種應用在某種場景時很有用:當需要根據獲得的動態變量值做分支判斷時。

參考以下代碼:

FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2)
   RETURN NCLOB
IS
   PRAGMA AUTONOMOUS_TRANSACTION;
   MID_ID   NUMBER (19);                                                --中間變量
BEGIN
   SELECT MAX(ID)       
     INTO MID_ID
     FROM TABLE1
    WHERE A = 1;

   IF MID_ID > 0
   THEN
      --一些邏輯處理
      COMMIT;
   ELSE
      --另一些邏輯
      COMMIT;
   END IF;
END;

如果以上代碼變量賦值不加入MAX(ID)時,當A=1的條件不滿足時,動態賦值語句會報錯,執行將中斷,將不會走到 IF -ELSE 分支判斷。

以上是一個Oracle存儲過程使用中的一個技巧,留意下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM