【发布时间】:2014-06-11 13:01:15
【问题描述】:
如果我错了,请纠正我,但我的印象是调用 RAISE_APPLICATION_ERROR() 会强制回滚。当 ROLLBACK 语句和/或执行 ROLLBACK 语句的方法不允许时,怎么可能在 PL/SQL 触发器中调用 RAISE_APPLICATION_ERROR()?
我觉得我在这里错过了一个关键点:)
提前致谢!
【问题讨论】:
-
我正在上一门关于 PL/SQL 的课程(这是我的第一年),我们使用的书(荷兰语)指定在调用 RAISE_APPLICATION_ERROR() 后完成 ROLLBACK。我想我将不得不与作者交谈,以澄清声明“回滚”和真正的 ROLLBACK 的区别:)
-
请允许我补充一点,触发器内的
commit或rollback是非常糟糕的做法。如果触发器发现错误,它应该引发一个信息异常并允许围绕 DML 语句的代码确定应该做什么(如果有的话)。根据触发器无法意识到的条件,最佳的操作过程可能是继续、执行部分回滚或中止整个操作。这些不是触发器可以正确做出的决定。
标签: oracle plsql triggers rollback