关于在 oracle trigger(insert)事件中调用存储过程的问题

 最近用ORACLE触发器写了点东西,不过,确发现 ORA-04092、ora-06512 等错误。怎么办?

最初,我也被弄得手忙脚乱。

于是,我查看 ORA-04092 提示的错误信息,是ROLLBACK和COMMIT 命令不能出现在触发器中。

于是,开始解决问题。发现,当在触发器里加入事务性操作时,会有如下错误:ORA-04092 cannot string in a trigger. 解决办法,在触发器里加入声明PRAGMA AUTONOMOUS_TRANSACTION,好了,不在弹出错误信息。

可是,我通过触发器调用存储过程,却发现存储过程执行后,数据没任何变化(我的存储过程是执行一次,删除一次中间表数据。)。难道是我的存储过程出了问题?单步调试,没任何问题。执行结果正确。

通过多次测试,发现原来是触发触发器的时候(触发事件为 insert after)由于没有提交(COMMIT)数据。在中间表中就查不到任何数据。处理方法,

第一步、新建一个中间表,做为触发器触发事件发生的中间表。

第二步、在中间表插入数据,提交。

第三步、在第一步新建的中间表中插入数据,提交执行成功。

第四步、检查结果,正常。

你可能感兴趣的:(关于在 oracle trigger(insert)事件中调用存储过程的问题)