【问题标题】:troubleshooting a oracle stored procedure对 oracle 存储过程进行故障排除
【发布时间】:2014-08-26 14:59:38
【问题描述】:

假设我必须编写一个包含大量 DML 操作的 oracle 存储过程。我需要设计它,就好像它在任何时候都失败了,我应该能够找到导致错误的特定语句。我知道的一种方法是对过程中的每个 DML 语句使用异常,但我认为这不是一个可行的选择。是否有可能写入日志文件,哪个特定语句导致错误,以及在 Unix 脚本中我们使用$? 命令来确定最后执行命令的状态的错误是什么?

【问题讨论】:

  • 为什么要自己抓或举?如果您只是让 DML 失败,调用者将看到引发的异常以及导致该异常的过程中的行号。你真的需要在日志中看到实际的语句,你可以参考源代码来查看它吗?

标签: sql oracle unix stored-procedures


【解决方案1】:

这是您使用的一种方法:

    declare
      vStge VARCHAR2(100);
    begin
       vStage := 'Start';
       --DML 1;
       vSTage := 'Next';
       --DML 2;
.
.
.
.
      vSTage := 'DOne';
   exception
      when others then
         pr_log_error ($$PLSQL_UNIT, vStage ); -- In this sp write to a log table using autonomous txn
         raise; -- or not?
   end;

一种更简洁的方法是将每个 DML 放在其自己的子过程中,并通过调用具有自主事务的存储过程将“开始”和“结束”日志记录到日志表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2011-02-07
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多