关于触发器中表*发生了变化, 触发器/函数不能读它
来源:互联网 发布:微商加粉王软件下载 编辑:程序博客网 时间:2024/05/30 23:17
在使用oracle触发器的过程中出现了表*发生了变化, 触发器/函数不能读它的异常,这里主要只写关于造成异常的其中一种--变异表。
以下是一个实例,代码如下:
create or replace trigger TIB_STAGE after insert on flow_instance_node for each rowdeclare -- local variables here integrity_error exception; errno integer; errmsg char(200); dummy integer; found boolean; v_dbid char(50); v_pre_id char(50); v_node_name char(50);begin --从v_pre试图中读取pre_id select p.PRE_ID into v_pre_id from v_pre p where p.INSTANCE_ID = :new.instance_id; select t.node_name into v_node_name from v_flow_instance_node t where t.INSTANCE_ID = :new.instance_id and t.FLOW_NODE_ID = :new.flow_node_id; if(v_node_name = '承办登记') then v_node_name := '资料审查'; end if; if(v_node_name = '结束') then v_node_name := '办件归档'; end if; v_dbid := SYS_GUID(); insert into cei_pre_time_use (dbid,pre_id,node_name,start_date,end_date) values (v_dbid,v_pre_id,v_node_name,:new.start_date,:new.end_date); P_CHECK_ENT_PRE_STAGE_TYPE(v_dbid,v_node_name,:new.instance_id);-- Errors handlingexception when integrity_error then raise_application_error(errno, errmsg); end TIB_STAGE;
在以上SQL中,是要在flow_instance_node表插入数据后,将其中的一些数据插入到cei_pre_time_use表中,但是实际上在有数据插入到flow_instacne_node表中后,就会出现表flow_instance_node发生了变化, 触发器/函数不能读它。
问题分析:
出现以上异常是因为trigger中SQL语句不能进行读或者修改触发语句的任何变异表,包括触发表本身。变异表就是当前被DML语句修改的表,而对于数据库上的trigger(触发器)来说,变异表就是trigger在其上定义的表。
解决方案:
仔细检查后,发现其中涉及到一个v_flow_instace_node的视图,该视图就是通过flow_instance_node表和另一个flow_node表关联的,而在以上代码中通过:new.instance 去关联v_flow_instacnce_node视图显然违反了以上变异表规则。放弃使用该视图,直接使用flow_node表去返出字段node_name后,异常消失。
0 0
- 关于触发器中表*发生了变化, 触发器/函数不能读它
- 表xxx发生了变化,触发器/函数不能读它
- 关于oracle中触发器触发时,报“表发生了变化,触发器或函数不能读它”错误
- oracle 触发器update 出现ORA-04091: 表 **发生了变化, 触发器/函数不能读它
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- ora 04091:表XX发生了变化,触发器/函数不能读它(lin49940)
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- 行级触发器对当前表操作,”ORA-04091: 表 XX 发生了变化, 触发器/函数不能读它“,解决方法
- Oracle触发器表发生了变化 触发器不能读它解决方法
- 解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- 写oracle行级触发器时,不能操作本表,报"表 *** 发生了变化,触发器/函数不能读"的错误的解决办法
- 关于自治事务解决触发器导致"ORA-04091:触发器/函数不能读它"不可行的验证
- oracle--ORA:04091:触发器/函数不能读它
- 触发器/函数不能读
- ORA-04091:表发生了变化触发器/函…
- python代码风格指南:PEP8 中文
- echarts地图 json数据 和 后套动态数据加载
- 程序员面试题精选100题(54)-C++/C#面试题(3)
- 新手mp3播放器心得(一)---- 获取所有歌曲(遍历文件获取、媒体库获取)
- Can't locate LibXML.pm
- 关于触发器中表*发生了变化, 触发器/函数不能读它
- struts2源码的自我理解
- Android源码分析-深入理解setContentView方法
- MySQL 中最重要的内建日期函数:
- Android@id和@+id区别
- Vuln - Synology NAS DSM 5.2 Remote Code Execution (RCE)
- Error: NDK integration is deprecated in the current plugin
- 程序员面试题精选100题(55)-不用+、-、×、÷做加法[算法]
- echarts地图 json数据 和 后套动态数据加载