ora-04091 table is mutating trigger/function may not see it

ora-04091 table is mutating trigger/function may not see it

發生原因:

在一個 Transaction 中對某個 Table (Ex. A_TABLE) 進行 insert 或 update 時,

該 Transaction 使用了 trigger(或 function), 而 trigger(或 function) 中又與 A_TABLE 有 select 或其它關係,

因此產生 ora-04091 table is mutating trigger/function may not see it

Ex:

a_function 中會對 a_table 作查詢, 並回傳查詢結果,

下列 SQL 即會產生此錯誤

INSERT INTO a_table (column1) VALUES ( a_function( '001' ) )

INSERT a_table, 而 a_function 又對 a_table  進行查詢

 

解決辦法:

將 trigger(或 function)  避開被鎖定的 Table