oracle - 使用 pl/sql 过程记录错误并处理异常

标签 oracle stored-procedures plsql error-handling

到目前为止,Stack Overflow 以及 Oracle 论坛和文档一直是我学习 PLSQL 过程中最好的 friend 。我在这里遇到了一个问题。任何建议表示赞赏。我正在编写一个过程,用于记录包可能遇到的任何错误,并将它们记录到我创建的错误日志表中。这是迄今为止我的代码。

CREATE OR REPLACE PROCEDURE APMS.test_procedure AS

    procedure write_error_log (errcode number, errstr varchar2, errline varchar2) is
    pragma autonomous_transaction; 
    -- this procedure stays in its own new private transaction
    begin                         
          INSERT INTO error_log
               (ora_err_tmsp,
                      ora_err_number,
                      ora_err_msg,
                      ora_err_line_no)
          values (CURRENT_TIMESTAMP,
                  errcode,
                  errstr,
                  errline);
          COMMIT;  -- this commit does not interfere with the caller's transaction.
    end write_error_log;

 BEGIN
    INSERT INTO mockdata
        VALUES ('data1', 'mockname', 'mockcity'); 

  exception when others then             
    write_error_log(sqlcode,sqlerrm,dbms_utility.format_error_backtrace);
    raise; 
 END test_procedure;
/

在该过程中,我当前使用模拟数据表来引发无效数字错误并将其记录到 error_log 表中。此时,错误日志表被证明可以正常工作并插入所需的数据。我的下一步是使用此过程在其他程序的异常处理程序中使用,以便捕获错误并将其记录到表中。目前,我的过程仅适用于mock_data 表。我的导师/上级告诉我,我需要向该程序传递一些参数,以便在其他包和异常处理程序中使用它。我只是遇到了一点麻烦。任何帮助将不胜感激,谢谢!

最佳答案

Steven Feuerstein 在 Oracle 杂志上撰写了多篇关于如何处理 PLSQL 中的错误的文章。他提供了一个小型框架(errpkg)来执行此操作。 DRY 原则(不要重复自己)是他的座右铭!

https://resources.oreilly.com/examples/0636920024859/blob/master/errpkg.pkg

关于oracle - 使用 pl/sql 过程记录错误并处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568953/

相关文章:

sql - postgres 相当于 all_constraints

sql - 我如何在更新前后验证一行

oracle - 如何在打开游标之前在存储过程中创建临时表?

sql - 如何检测存储过程是否已经存在

oracle - 比较两个日期字段时为 "Literal does not match format string"

java - 如何在Java中创建临时表并在其中插入xml数据

Oracle 软件包规范和正文

sql - 如何选择多列,其中只有一列不同? (甲骨文数据库)

oracle - 如何在 Grails/GORM 中应用 NULLS LAST 排序

mysql - 无法创建此存储过程。它有什么问题