错误的原因
该错误是在编写trigger时常遇到的问题,其根本原因是由于对本表的操作造成的。对于使用了for each row 的触发器,做了DML操作(delete,update,insert),还没有提交时,是不允许其他PL/SQL对本表的DML操作,以及查询,因为此时数据不一致。

解决办法:

1 自治事务

自治事物的概念:就是在subprogram里进行事物的提交不影响主程序的事务,同样主程序的提交或回滚都不影响子程序的commit,即子程序的事物和主程序的事物完全独立。
示例:

[java] view plaincopy
  1. CREATE OR REPLACE TRIGGER TR_T
  2. AFTER DELETE ON T
  3. FOR EACH ROW
  4. DECLARE V_COUNT NUMBER;
  5. PRAGMA AUTONOMOUS_TRANSACTION;
  6. BEGIN
  7. INSERT INTO T VALUES(:OLD.ID,:OLD.MC,SYSDATE);
  8. END TR_DEL_CABLE;

PRAGMA AUTONOMOUS_TRANSACTION:就是对自治事务的声明

要注意的就是:自治事务必须慎用,因为一个DML可能会产生许多个独立的事物,这很容易引发死锁,ASKTOM上对AUTONOMOUS_TRANSACTION的看法是:唯一的用途就是作审计日志,其他一概不该使用。

2 网上还有人给出了另一种解决办法:建临时表

新建了与要操作的表结构完全相同的临时表,使得在本表上的触发器读写建好的临时表,再用临时表上的触发器写回本表,也倒是个办法,但是不是最好的,过于繁琐

治本之法:Oracle的绝大多数类型的trigger都不支持dml原表,最好是把此逻辑放到触发器外面,另写存储过程实现原有功能

错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法相关推荐

  1. 关于错误:table is mutating, trigger/function may not see it

    转载于:http://www.itpub.net/thread-1032067-1-1.html# 关于错误:"table is mutating, trigger/function may ...

  2. ORA-04091: table is mutating, trigger/function may not see it

    今天在论坛里发现了一个关于ORA-04091的老帖子,收获良多,特此整理一下 关于ORA-04091: table is mutating, trigger/function may not see ...

  3. ORA-04091: table xxxx is mutating, trigger/function may not see it

    今天同事让我看一个 触发器为什么老是报错,当执行DML语句触发触发器后,会报ORA-04091错误:ORA-04091: table xxxx is mutating, trigger/functio ...

  4. LunarPages空间500错误原因及解决办法

    我们在使用LunarPages空间时,有时在安装程序时可能经常出现500错误这一般是由于服务器内部出现的错误引起的,那么导致500错误原因有哪些呢?又该如何解决呢?下面来说说500错误常见原因及解决办 ...

  5. 有关域索引错误产生的原因及解决办法

    1说明 数据库错误ORA-29861:域索引标记为LOADING/FAILED/UNUSABLE,其错误原因及解决办法,根据ORACLE官方文档的说法如下: // *Cause: An attempt ...

  6. 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法

    原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...

  7. 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解决办法 ...

  8. Invalid bound statement (not found)错误的原因和解决办法

    Invalid bound statement (not found)错误的原因和解决办法 在maven项目中有专门的resources文件夹用来存放各种配置文件,但是不一定都会放在里面,如果配置文件 ...

  9. 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!

    占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...

最新文章

  1. c语言中gets函数可以输入空格吗_C语言中printf和gets函数的实用技巧
  2. 【转】GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
  3. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解
  4. tomcat学习笔记1
  5. Python3 基础学习笔记 C06【用户输入和 while 循环】
  6. 大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了
  7. mysql根据已有表创建新表_SQL根据现有表新建一张表
  8. CentOS7.1 KVM虚拟化之经常使用管理虚拟机命令(3)
  9. 爬取人民日报_【爬虫系列】人民日报半个世纪的资料(文末福利)
  10. 电子通信协议之CAN总线协议篇
  11. 半监督学习与直推式学习
  12. 胡说八道设计模式—观察者模式
  13. windows7与linux,Windows7与Linux——操作系统大PK
  14. 重磅!被称“新材料之王”“黑黄金”,中石化大丝束碳纤维投产,全球仅4家能产 | 美通社头条...
  15. 在vue3中使用jsx语法
  16. 地图可视化数据处理技术在银行领域的应用
  17. JAVA中去掉字符串中的空格
  18. 常用电子器件 ——接插件
  19. 【精】LintCode领扣算法问题答案:316. 组合集
  20. 首次在Macbook pro配置JDK

热门文章

  1. C语言Huffman Encode霍夫曼编码的算法(附完整源码)
  2. QT的QTextLayout类的使用
  3. QT的QLibrary类的使用
  4. C++ 类对象作为类成员
  5. php 反向截取,反向PHP功能
  6. 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
  7. HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
  8. 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
  9. Excel单因素方差分析
  10. 电机高频注入原理_永磁同步电机转子位置与速度估算的新方法,精度好,性价比高...