oracle 触发器update 出现ORA-04091: 表 **发生了变化, 触发器/函数不能读它
2017-04-08 14:04
507 查看
出现这种错误的原因是:如果一个触发器定义在表a上,那么在触发器被触发的过程中 表a 是被锁定的,就连读取都不可以。
错误实例:
上面只是计算一下表的列数,但是任然报错。
解决办法:
create or replace trigger checkUpdateExpertCertificate before update on expert_certificate for each row
declare
num int;
myexp exception;
PRAGMA AUTONOMOUS_TRANSACTION;
begin
select count(*) into num from expert_certificate ;
if num>0 then
raise myexp;
end if;
exception
when myexp then raise_application_error('-20002', '证书类型互斥' );
COMMIT;
end checkUpdateExpertCertificate;
结果:
我的表中是有数据的,可以看到,我设置的异常被正常触发了。
多加了:
PRAGMA AUTONOMOUS_TRANSACTION;
错误实例:
create or replace trigger checkUpdateExpertCertificate before update on expert_certificate for each row declare num int; myexp exception; begin select count(*) into num from expert_certificate ; if num>0 then raise myexp; end if; exception when myexp then raise_application_error('-20002', '证书类型互斥' ); end checkUpdateExpertCertificate;
上面只是计算一下表的列数,但是任然报错。
解决办法:
create or replace trigger checkUpdateExpertCertificate before update on expert_certificate for each row
declare
num int;
myexp exception;
PRAGMA AUTONOMOUS_TRANSACTION;
begin
select count(*) into num from expert_certificate ;
if num>0 then
raise myexp;
end if;
exception
when myexp then raise_application_error('-20002', '证书类型互斥' );
COMMIT;
end checkUpdateExpertCertificate;
结果:
我的表中是有数据的,可以看到,我设置的异常被正常触发了。
多加了:
PRAGMA AUTONOMOUS_TRANSACTION;
COMMIT;
相关文章推荐
- ora-04091 表XX发生了变化 触发器/函数不能读 的错误处理
- ora-04091 表发生了变化,触发器函数不能读它
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- ora 04091:表XX发生了变化,触发器/函数不能读它(lin49940)
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- 行级触发器对当前表操作,”ORA-04091: 表 XX 发生了变化, 触发器/函数不能读它“,解决方法
- 关于oracle中触发器触发时,报“表发生了变化,触发器或函数不能读它”错误
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle--ORA:04091:触发器/函数不能读它
- 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案
- 写oracle行级触发器时,不能操作本表,报"表 *** 发生了变化,触发器/函数不能读"的错误的解决办法
- ORA-04091:表发生了变化触发器/函…
- [学习笔记]ORA-04091 触发器/函数不能读它 的解决
- 表xxx发生了变化,触发器/函数不能读它
- 解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它
- 关于自治事务解决触发器导致"ORA-04091:触发器/函数不能读它"不可行的验证
- oracle 触发器 - 避开 ora-04091