关于ORA-04091异常的出现原因,以及解决方案
2013-12-09 13:57
429 查看
问题分析
在Oracle中执行DML语句的时候是需要显示进行提交操作的。当我们进行插入的时候,会触发触发器执行对触发器作用表和扩展表的种种操作,但是这个时 候触发器和插入语句是在同一个事务管理中的,因此在插入语句没有被提交的情况下,我们无法对触发器作用表进行其他额外的操作。如果执行其他额外的操作则会 抛出如上异常信息。解决方案
:1,我们知道,出错的原因是因为触发器和DML语句在同一事务管理中,所以方案一便是将触发器和DML语句分成两个单独的事务处理。这里可以使用Pragma autonomous_transaction; 告诉Oracle触发器是自定义事务处理。SQL语句如下:
create or replace trigger trigger_insert_cust_rate after insert on t_cr_customer_rate FOR EACH ROW DECLARE V_CON NUMBER(10); pragma autonomous_transaction; --这里是关键的地方,在变量申明的地方,指定自定义事务处理。 begin select count(1) into V_CON from t_cr_customer_rate t, t_It_Customer C where t.t_it_customer_id = C.ID and t.valid = 1 AND C.ID = :NEW.T_IT_CUSTOMER_ID; --dbms_output.put_line(V_CON); if (V_CON > 0) THEN if (:NEW.Valid = 1) THEN RAISE_APPLICATION_ERROR(-20000, 'CUST DATA IS DISTINCT,NO INSERT'); END IF; END IF; commit; --这里需要显示提交事务 end;
文章参考自
http://www.iteye.com/topic/1124681
相关文章推荐
- 关于ORA-04091异常的出现原因,以及解决方案
- 关于ORA-04091异常的出现原因,以及解决方案
- 网页使用ie或者360打开时按F12出现程序停止运行异常的原因以及解决方案
- Android 3.0获取互联网资源时出现异常的原因分析以及解决方案
- 关于VC出现 0x0C150002 错误的原因以及解决方案
- php进行递归时出现Call to a member function 方法() on null的原因以及解决方案
- 关于异常的小程序出现debug assertion failed!错误的原因是什么?
- 关于Load Balance出现ViewState异常的解决方案
- 关于项目中出现乱码的原因有哪些以及解决的办法
- 关于Android Force Close 出现的原因 以及解决方法
- spring mvc 配置web.xml servlet.xml文件配置以及出现异常的解决方案
- 关于struts2+hibernate3.2中出现的java.lang.ClassCastException: java.lang.Integer异常的解决方案
- oracle变异表触发器中ORA-04091错误原因及解决方案
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏(超详细版汇总上)
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏(超详细版汇总上)
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏(超详细版汇总下)
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
- 使用某些框架出现simplexml_load_string()的原因以及解决方案
- 关于Android自定义相机进行拍照(小米手机出现异常的原因)