回滚错误日志不起作用的原因?

时间:2016-01-13 07:27:14

标签: sql oracle plsql

我知道回滚不应该对错误日志起作用,但应该采用逻辑方式。 让我考虑以下示例。

CREATE OR REPLACE procedure error_ins
AS
BEGIN
   INSERT INTO dummy VALUES(4) LOG ERRORS INTO ERROR_LOG_DMLEL;
   INSERT INTO dummy VALUES(2) LOG ERRORS INTO ERROR_LOG_DMLEL;
   INSERT INTO dummy VALUES(7) LOG ERRORS INTO ERROR_LOG_DMLEL;
   COMMIT;
   EXCEPTION
     WHEN OTHERS THEN
         ROLLBACK;
         dbms_output.put_line('error ocured');
END;

这里dummy表的值将回滚到之前的状态 发生异常但ERROR_LOG_DMLEL表记录的错误不会。

回滚对于错误日志不起作用是好的,但为什么它不起作用?

或者是他需要考虑的其他事情?

我浏览了几篇文档,但我找不到任何参考文献。

如果有人知道原因,请回信。

谢谢。

1 个答案:

答案 0 :(得分:6)

日志记录不是主要事务的一部分。请参阅此处获取详细说明:http://www.oracle-developer.net/display.php?id=329。如果在主事务中发生错误记录,并且事务失败,您将丢失错误日志,这不是您通常想要的。

在相关说明中,这就是自定义日志记录例程使用PRAGMA AUTONOMOUS TRANSACTION

的原因