今天想在函數(shù)里面進行update操作,發(fā)現(xiàn)這樣子的錯誤會拋以下的DML錯誤,如下:
ORA-14551: cannot perform. a DML operation inside a query -
查詢資料發(fā)現(xiàn):
對數(shù)據(jù)庫有寫操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函數(shù),是無法簡單的用SQL來調(diào)用的.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
解決辦法如下,只需在聲明中添加
PRAGMA AUTONOMOUS_TRANSACTION - CREATE OR REPLACE FUNCTION FUN_SET_PROJECT_COST (V_BUDGET_OBJECT_ID IN VARCHAR2,V_ADJUST_ID IN VARCHAR2)
- RETURN VARCHAR2
- IS
- PRAGMA AUTONOMOUS_TRANSACTION;
CREATE OR REPLACE FUNCTION FUN_SET_PROJECT_COST (V_BUDGET_OBJECT_ID IN VARCHAR2,V_ADJUST_ID IN VARCHAR2)RETURN VARCHAR2ISPRAGMA AUTONOMOUS_TRANSACTION;
PRAGMA AUTONOMOUS_TRANSACTION自治事務(wù)
當前的存儲過程作為已有事務(wù)的子事務(wù)運行,子事務(wù)的commit,rollback操作不影響父事務(wù)的狀態(tài)
在你的一個事務(wù)(外層事務(wù))中可以定義一個或幾個自治事務(wù)。自治事務(wù)可以獨立commit,不對外層事務(wù)產(chǎn)生影響,同樣外層事務(wù)的 rollback 也對自治事務(wù)沒有影響。通??梢钥紤]將自治事務(wù)定義成一個過程,在外層的事務(wù)中調(diào)用。