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