当我们针对一张表建立触发器的时候,不小心就爆出来了一个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了。下面是我借鉴的原图