oracle - 是否应该在引发应用程序错误之前发出回滚?
问题描述
这是我程序的一部分。过程失败时没有发生回滚。
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;
解决方案
Rollback
应该先发出,然后在 Log 表中做所有你想做的逻辑操作,然后Raise
. Raise
是程序的结束部分,从技术上讲,它告诉用户这个特定的错误已经发生并且程序已经结束。
推荐阅读
- c++ - 如何将输入从我的 C 程序传递到在命令行中运行的另一个程序?
- java - 如何修复“此操作可能是死锁原因”
- python - 如何计算附近有多少个地雷?
- python - 不和谐重写,事件循环不可调用
- python - “TypeError:+ 的不支持的操作数类型:'int' 和 'NoneType”我该如何解决这个错误,你能解释为什么它不起作用
- r - 将带有字符和数字的数据排序为R中的数字
- php - 面临错误:413 请求实体太大
- spring-boot - 如何使用 Spring Boot 查看存储在 Redis 缓存中的值
- amazon-web-services - AWS Athena 导入 CSV 文件
- python-3.x - 多行 Jinja 语句