在寫存儲過程或函數時,經常需要用到中間變量,需要將一些值做臨時存儲。
可以通過動態變量方式來賦值。如下:
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存儲過程使用中的一個技巧,留意下。