2016-01-13 4 views
1

Я знаю, что откат не должен работать с журналами ошибок, но логичным образом это должно быть. Позвольте мне рассмотреть следующий пример.Откат для журнала ошибок не работает почему?

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 не будет.

Хорошо, что откат не работает для журнала ошибок, но почему он не работает?

Или это что-то еще, что мне нужно учитывать?

Я просмотрел несколько документов, на которые я не мог найти ссылок.

Если кто-нибудь знает причину, пожалуйста, напишите.

спасибо.

ответ

6

Ведение журнала не является частью основной транзакции. См. Здесь подробное объяснение: http://www.oracle-developer.net/display.php?id=329. Если в основной транзакции произошла ошибка, и транзакция завершилась неудачно, вы потеряете с ней журнал ошибок, чего вы обычно не хотите.

Относительно примечания, поэтому пользовательские процедуры ведения журнала используют PRAGMA AUTONOMOUS TRANSACTION.

Смежные вопросы