Sql 对oracle存储过程进行故障排除

Sql 对oracle存储过程进行故障排除,sql,oracle,unix,stored-procedures,Sql,Oracle,Unix,Stored Procedures,假设我必须编写一个包含大量DML操作的oracle存储过程。我需要将其设计为在任何时候都失败,我应该能够找到导致错误的特定语句。我知道的一种方法是对过程中的每个DML语句使用异常,但我认为这不是一个可行的选择。是否仍有可能写入日志文件,哪个特定语句导致了错误,以及与我们使用$的Unix脚本中的错误类似?命令以确定上次执行的命令的状态?以下是您使用的方法: declare vStge VARCHAR2(100); begin vStage := 'Star

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

以下是您使用的方法:

    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放在自己的子过程中,并通过对具有自治事务的存储过程的调用将开始和结束日志保存到日志表中。

为什么要自己捕获或引发任何内容?如果您让DML失败,调用方将看到引发的异常以及导致该异常的过程中的行号。您真的需要查看日志中的实际语句吗?您只需返回源代码即可查看它?