我知道回滚不应该对错误日志起作用,但应该采用逻辑方式。 让我考虑以下示例。
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
表记录的错误不会。
回滚对于错误日志不起作用是好的,但为什么它不起作用?
或者是他需要考虑的其他事情?
我浏览了几篇文档,但我找不到任何参考文献。
如果有人知道原因,请回信。
谢谢。
答案 0 :(得分:6)
日志记录不是主要事务的一部分。请参阅此处获取详细说明:http://www.oracle-developer.net/display.php?id=329。如果在主事务中发生错误记录,并且事务失败,您将丢失错误日志,这不是您通常想要的。
在相关说明中,这就是自定义日志记录例程使用PRAGMA AUTONOMOUS TRANSACTION
。