错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法
错误的原因
该错误是在编写trigger时常遇到的问题,其根本原因是由于对本表的操作造成的。对于使用了for each row 的触发器,做了DML操作(delete,update,insert),还没有提交时,是不允许其他PL/SQL对本表的DML操作,以及查询,因为此时数据不一致。
解决办法:
1 自治事务
自治事物的概念:就是在subprogram里进行事物的提交不影响主程序的事务,同样主程序的提交或回滚都不影响子程序的commit,即子程序的事物和主程序的事物完全独立。
示例:
- CREATE OR REPLACE TRIGGER TR_T
- AFTER DELETE ON T
- FOR EACH ROW
- DECLARE V_COUNT NUMBER;
- PRAGMA AUTONOMOUS_TRANSACTION;
- BEGIN
- INSERT INTO T VALUES(:OLD.ID,:OLD.MC,SYSDATE);
- END TR_DEL_CABLE;
PRAGMA AUTONOMOUS_TRANSACTION:就是对自治事务的声明
要注意的就是:自治事务必须慎用,因为一个DML可能会产生许多个独立的事物,这很容易引发死锁,ASKTOM上对AUTONOMOUS_TRANSACTION的看法是:唯一的用途就是作审计日志,其他一概不该使用。
2 网上还有人给出了另一种解决办法:建临时表
新建了与要操作的表结构完全相同的临时表,使得在本表上的触发器读写建好的临时表,再用临时表上的触发器写回本表,也倒是个办法,但是不是最好的,过于繁琐
3 治本之法:Oracle的绝大多数类型的trigger都不支持dml原表,最好是把此逻辑放到触发器外面,另写存储过程实现原有功能
错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法相关推荐
- 关于错误:table is mutating, trigger/function may not see it
转载于:http://www.itpub.net/thread-1032067-1-1.html# 关于错误:"table is mutating, trigger/function may ...
- ORA-04091: table is mutating, trigger/function may not see it
今天在论坛里发现了一个关于ORA-04091的老帖子,收获良多,特此整理一下 关于ORA-04091: table is mutating, trigger/function may not see ...
- ORA-04091: table xxxx is mutating, trigger/function may not see it
今天同事让我看一个 触发器为什么老是报错,当执行DML语句触发触发器后,会报ORA-04091错误:ORA-04091: table xxxx is mutating, trigger/functio ...
- LunarPages空间500错误原因及解决办法
我们在使用LunarPages空间时,有时在安装程序时可能经常出现500错误这一般是由于服务器内部出现的错误引起的,那么导致500错误原因有哪些呢?又该如何解决呢?下面来说说500错误常见原因及解决办 ...
- 有关域索引错误产生的原因及解决办法
1说明 数据库错误ORA-29861:域索引标记为LOADING/FAILED/UNUSABLE,其错误原因及解决办法,根据ORACLE官方文档的说法如下: // *Cause: An attempt ...
- 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...
- Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法
Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法 ...
- Invalid bound statement (not found)错误的原因和解决办法
Invalid bound statement (not found)错误的原因和解决办法 在maven项目中有专门的resources文件夹用来存放各种配置文件,但是不一定都会放在里面,如果配置文件 ...
- 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!
占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...
最新文章
- c语言中gets函数可以输入空格吗_C语言中printf和gets函数的实用技巧
- 【转】GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解
- tomcat学习笔记1
- Python3 基础学习笔记 C06【用户输入和 while 循环】
- 大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了
- mysql根据已有表创建新表_SQL根据现有表新建一张表
- CentOS7.1 KVM虚拟化之经常使用管理虚拟机命令(3)
- 爬取人民日报_【爬虫系列】人民日报半个世纪的资料(文末福利)
- 电子通信协议之CAN总线协议篇
- 半监督学习与直推式学习
- 胡说八道设计模式—观察者模式
- windows7与linux,Windows7与Linux——操作系统大PK
- 重磅!被称“新材料之王”“黑黄金”,中石化大丝束碳纤维投产,全球仅4家能产 | 美通社头条...
- 在vue3中使用jsx语法
- 地图可视化数据处理技术在银行领域的应用
- JAVA中去掉字符串中的空格
- 常用电子器件 ——接插件
- 【精】LintCode领扣算法问题答案:316. 组合集
- 首次在Macbook pro配置JDK
热门文章
- C语言Huffman Encode霍夫曼编码的算法(附完整源码)
- QT的QTextLayout类的使用
- QT的QLibrary类的使用
- C++ 类对象作为类成员
- php 反向截取,反向PHP功能
- 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
- 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
- Excel单因素方差分析
- 电机高频注入原理_永磁同步电机转子位置与速度估算的新方法,精度好,性价比高...