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了。下面是我借鉴的原图