Welcome 微信登录

首页 / 数据库 / MySQL / Oracle触发器给表自身的字段重新赋值出现ORA-04091异常

业务描述如下:Oracle下插入一个表的时候,需要根据一个字段的值更新另一个字段的值。当然也可以通过程序就能很简单得实现,只是这个字段只是数据交换用,和系统主业务没关系,不想修改程序,所以才用触发器的方式实现。表结构定义和触发器定义如下: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.linuxidc.com/Linux/2013-07/87076.htm说明得很详细找到了新的方法,那就是给字段直接赋值修改之后的触发器如下: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相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle基础教程之通过RMAN修复坏块关于ORA-04091异常的出现原因,以及解决方案相关资讯      Oracle触发器  ORA-04091 
  • Oracle数据库中的触发器  (03/11/2015 10:12:29)
  • Oracle利用触发器实现自增列  (02/10/2015 11:27:09)
  • Oracle中的System Triggers(DDL触  (02/25/2014 19:33:55)
  • Oracle中的触发器  (02/14/2015 11:22:03)
  • Oracle触发器问题解决一例  (11/11/2014 17:36:10)
  • Oracle中变异表(ORA-04091)处理方  (01/21/2014 14:01:40)
本文评论 查看全部评论 (0)
表情: 姓名: 字数