Oracle中针对一张表建立触发器,并且触发器也处理同一张表的数据(ora-04091 错误)

当我们针对一张表建立触发器的时候,不小心就爆出来了一个ora-04091错误的时候,不要慌,也不要想着建立一个新的试图或者是临时表,这样做都太麻烦了,下面我上一个简单明了的方法

create or replace trigger OrderJionTran1
before  UPDATE on yw_tranaviation
for each row 
  
declare
     integrity_error  exception;
     errno            integer;
     errmsg           char(200);
     pragma autonomous_transaction;
begin
    update yw_tranaviation t set t.numbered=:new.numbered,t.sweighted=:new.sweighted,t.bulksed=:new.bulksed
     where t.pretranid= :old.sid;
     commit;
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end ;

注意这两个红色的地方,因为对于同一张表进行触发器操作的时候是在同一事务中,所以会报错,我们申明一个新的事务,并且手动提交事务,一切就ok了。下面是我借鉴的原图

原文地址:https://www.cnblogs.com/xiaoch/p/13417958.html