Oracle觸發器給表自身的欄位重新賦值出現ORA-04091異常
阿新 • • 發佈:2019-01-28
業務描述如下:
在插入一個表的時候,需要根據一個欄位的值更新另一個欄位的值。當然也可以通過程式就能很簡單得實現,只是這個欄位只是資料交換用,和系統主業務沒關係,不想修改程式,所以才用觸發器的方式實現。
表結構定義和觸發器定義如下:
create table debug_demo1( id varchar(32), name varchar(100), note varchar(200), primary key(id) ); create or replace trigger tri_debug_demo1 before insert on debug_demo1 for each row begin update debug_demo1 set note = 'test' where id = :new.id; end tri_debug_demo1;
結果執行insert操作的時候,Oracle出現了ORA-04091異常
ORA-04091:表debug_demo1發生了變化 觸發器/函式不能讀它
ORA-06512: 在tri_debug_demo1 line...
ORA-04088: 觸發器tri_debug_demo1 執行過程中出錯
修改之後的觸發器如下:
create or replace trigger tri_debug_demo1
before insert on debug_demo1
for each row
begin
:new.note := 'test';
end tri_debug_demo1;
經過測試,可以正常進行insert操作,也能達到預期。