首页 > 解决方案 > 是否应该在引发应用程序错误之前发出回滚?

问题描述

这是我程序的一部分。过程失败时没有发生回滚。
1. 是否应该在引发应用程序错误之前发出回滚?
2. 在这种情况下,将使用引发应用程序错误的回溯工作。它在日志表中进行跟踪。但是想知道如果回滚,引发应用程序错误是否会正确发出回溯。

EXCEPTION
 WHEN OTHERS THEN
    /*Log that some other error occured and backtrace*/
    eps_datareduction_run_log ( 5, 'CREDIT', current_timestamp,  'FAILED', 'CREDIT: Error Number:'||sqlcode||'Error Code:'||substr(sqlerrm, 1, 200)||'-backtrace:'||dbms_utility.format_error_backtrace, sysdate, user, null, null );
    lv_err_msg := 'Unexcpected Error '||SUBSTR(sqlerrm,1,255);
    raise_application_error(-20000,lv_err_msg || '- backtrace - ' || dbms_utility.format_error_backtrace);
    ROLLBACK;

标签: oracleexceptionplsql

解决方案


Rollback应该先发出,然后在 Log 表中做所有你想做的逻辑操作,然后Raise. Raise是程序的结束部分,从技术上讲,它告诉用户这个特定的错误已经发生并且程序已经结束。


推荐阅读