oracle函數:ORA-14551: cannot perform a DML operation inside a query

在Oracle函數中進行insert操做就會報 ORA-14551: cannot perform a DML operation inside a query 數據庫

 

問題緣由:
對數據庫有寫操做(insert、update、delete、create、alter、commit)的函數,沒法簡單的用SQL來調用的
 ide

解決方法:函數

須要再聲明添加PRAGMA AUTONOMOUS_TRANSACTION;orm

 

例如:事務

create or replace function update_contractDate(v_contractId in contract.id%type, v_contractBeginDateStr in varchar2) 
return number 
as
pragma autonomous_transaction;
 it

PRAGMA AUTONOMOUS_TRANSACTION聲明爲自治事務io

當前的函數做爲已有事務的子事務運行,子事務的commit,rollback操做不影響父事務的狀態
在一個事務中能夠定義一個或幾個自治事務,自治事務能夠獨立commit,不會對外層事務產生影響,一樣外層事務的rollback也對自治事務沒有影響,一般能夠考慮將自治事務定義成一個過程,在外層的事務中調用。function

相關文章
相關標籤/搜索