Oracle触发器给表自身的字段重新赋值出现ORA-04091异常
2013-07-01 17:23
387 查看
业务描述如下:
在插入一个表的时候,需要根据一个字段的值更新另一个字段的值。当然也可以通过程序就能很简单得实现,只是这个字段只是数据交换用,和系统主业务没关系,不想修改程序,所以才用触发器的方式实现。
表结构定义和触发器定义如下:
结果执行insert操作的时候,Oracle出现了ORA-04091异常
ORA-04091:表debug_demo1发生了变化 触发器/函数不能读它
ORA-06512: 在tri_debug_demo1 line...
ORA-04088: 触发器tri_debug_demo1 执行过程中出错
对于此异常,这篇帖子http://www.iteye.com/topic/1124681说明得很详细
在看了这篇帖子http://www.itpub.net/thread-1615812-1-1.html之后,找到了新的方法,那就是给字段直接赋值
修改之后的触发器如下:
经过测试,可以正常进行insert操作,也能达到预期。
在插入一个表的时候,需要根据一个字段的值更新另一个字段的值。当然也可以通过程序就能很简单得实现,只是这个字段只是数据交换用,和系统主业务没关系,不想修改程序,所以才用触发器的方式实现。
表结构定义和触发器定义如下:
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 执行过程中出错
对于此异常,这篇帖子http://www.iteye.com/topic/1124681说明得很详细
在看了这篇帖子http://www.itpub.net/thread-1615812-1-1.html之后,找到了新的方法,那就是给字段直接赋值
修改之后的触发器如下:
create or replace trigger tri_debug_demo1 before insert on debug_demo1 for each row begin :new.note := 'test'; end tri_debug_demo1;
经过测试,可以正常进行insert操作,也能达到预期。
相关文章推荐
- Oracle触发器给表自身的字段重新赋值出现ORA-04091异常
- 在主键中增加一个字段出现ora-00955异常
- 关于ORA-04091异常的出现原因,以及解决方案
- 关于ORA-04091异常的出现原因,以及解决方案
- 关于ORA-04091异常的出现原因,以及解决方案
- PLSQL Developer删除奇葩表出现异常ORA-00942: 表或试图不存在
- 解决超出打开游标的最大数异常ORA-01000 递归SQL 级别1 出现错误 最全方案-最全方案
- EAS 开发中,序时簿上,对某一字段的排序出现混乱的异常分析
- PLSQL Developer删除奇葩表出现异常ORA-00942: 表或试图不存在
- oracle中出现ORA-00904: : 某字段 标识符无效问题
- oracle 10g控制台登录出现Io 异常:Unknown host specified 或ORA-12154 TNS无法解析指定的连接标识符等
- 关于ora-24381异常出现的情况
- Oracle触发器修改自身字段解决方案
- 异常1:在公司实习时使用myeclipse6.0,重新配置tomcat和jdk时出现的问题
- Oracle触发器修改自身字段解决方案
- 支付宝支付出现”创建交易异常,请重新创建后再付款”
- 连接oracle数据库出现异常ORA-00257: archiver error. Connect internal only, until freed.
- 水晶报表参数赋值时出现异常: 无效的索引
- postfix队列堵塞,出现很多异常字段邮件
- 关于错误:"ORA-04091: table is mutating, trigger/function may not see it"的分析(触发器操作自身表)