关于在 oracle trigger(insert)事件中调用存储过程的问题
2007-11-15 00:20
686 查看
最近用ORACLE触发器写了点东西,不过,确发现 ORA-04092、ora-06512 等错误。怎么办?
最初,我也被弄得手忙脚乱。
于是,我查看 ORA-04092 提示的错误信息,是ROLLBACK和COMMIT 命令不能出现在触发器中。
于是,开始解决问题。发现,当在触发器里加入事务性操作时,会有如下错误:ORA-04092 cannot string in a trigger. 解决办法,在触发器里加入声明PRAGMA AUTONOMOUS_TRANSACTION,好了,不在弹出错误信息。
可是,我通过触发器调用存储过程,却发现存储过程执行后,数据没任何变化(我的存储过程是执行一次,删除一次中间表数据。)。难道是我的存储过程出了问题?单步调试,没任何问题。执行结果正确。
通过多次测试,发现原来是触发触发器的时候(触发事件为 insert after)由于没有提交(COMMIT)数据。在中间表中就查不到任何数据。处理方法,
第一步、新建一个中间表,做为触发器触发事件发生的中间表。
第二步、在中间表插入数据,提交。
第三步、在第一步新建的中间表中插入数据,提交执行成功。
第四步、检查结果,正常。
最初,我也被弄得手忙脚乱。
于是,我查看 ORA-04092 提示的错误信息,是ROLLBACK和COMMIT 命令不能出现在触发器中。
于是,开始解决问题。发现,当在触发器里加入事务性操作时,会有如下错误:ORA-04092 cannot string in a trigger. 解决办法,在触发器里加入声明PRAGMA AUTONOMOUS_TRANSACTION,好了,不在弹出错误信息。
可是,我通过触发器调用存储过程,却发现存储过程执行后,数据没任何变化(我的存储过程是执行一次,删除一次中间表数据。)。难道是我的存储过程出了问题?单步调试,没任何问题。执行结果正确。
通过多次测试,发现原来是触发触发器的时候(触发事件为 insert after)由于没有提交(COMMIT)数据。在中间表中就查不到任何数据。处理方法,
第一步、新建一个中间表,做为触发器触发事件发生的中间表。
第二步、在中间表插入数据,提交。
第三步、在第一步新建的中间表中插入数据,提交执行成功。
第四步、检查结果,正常。
相关文章推荐
- 关于 "java 如何调用Oracle存储过程中的动态refcursor结果集" 问题
- 关于asp调用oracle存储过程的问题
- 关于mysql中设置隔一段事件调用一个存储过程的事件
- 关于存储过程中Insert问题
- 关于shell调用MySQL存储过程的问题
- oracle 父存储过程调用子过程的事务问题
- C#调用Oracle带有out游标参数存储过程的问题
- 关于Oracle存储过程中是否需要写commit的问题
- 关于EF调用存储过程碰到的问题解决过程
- Oracle 存储过程中调用自定义的函数问题?
- .Nettiers的事件:下拉控件数据绑定,Insert,调用自定存储过程,获取新增ID,事务,DeepLoad,DeepSave,Save,Update,DeepDelete【原创】
- 运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题
- 关于JDBC使用命名参数(named parameters)进行存储过程调用的问题
- oracle 存储过程在不同模式下调用的问题
- ORACLE在存储过程中调用dbms_包的权限问题
- 关于在SQLSERVER2000中存储过程调用存储过程返回参数的问题
- 关于调用存储过程获取参数返回值和输出参数注意的问题
- 关于SPRING调用ORACLE的存储过程
- 关于在PB中动态调用ORACLE的存储过程
- 关于Oracle存储过程中的IN子句传参的问题(不能直接传字符串,需要处理)