【问题标题】:Oracle PL/SQL: how to get the stack trace, package name and procedure nameOracle PL/SQL:如何获取堆栈跟踪、包名和过程名
【发布时间】:2011-10-25 07:58:30
【问题描述】:

有时异常会返回如下内容:“ORA-06502: PL/SQL: numeric or value error: 字符串缓冲区太小”。

它不那么可读,因为它既不报告表,也不报告列和它尝试写入的值。

在异常发生或被捕获时获取当前过程名称会很有用。

我怎样才能得到它?

【问题讨论】:

    标签: oracle exception-handling plsql stack-trace


    【解决方案1】:

    你可能想要DBMS_UTILITY.FORMAT_ERROR_BACKTRACE函数

    SQL> ed
    Wrote file afiedt.buf
    
      1  create or replace procedure p1
      2  is
      3  begin
      4    raise_application_error( -20001, 'Error 1', true );
      5* end;
    SQL> /
    
    Procedure created.
    
    SQL> create or replace procedure p2
      2  as
      3  begin
      4    null;
      5    p1;
      6  end;
      7  /
    
    Procedure created.
    
    SQL> begin
      2    p2;
      3  exception
      4    when others then
      5      dbms_output.put_line( dbms_utility.format_error_backtrace );
      6  end;
      7  /
    ORA-06512: at "SCOTT.P1", line 4
    ORA-06512: at "SCOTT.P2", line 5
    ORA-06512: at
    line 2
    
    
    PL/SQL procedure successfully completed.
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        我使用DBMS_UTILITY.FORMAT_ERROR_STACKDBMS_UTILITY.FORMAT_ERROR_BACKTRACE 的组合。 (改进 Justin Cave 的答案)

        when others then
          Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_STACK() );
          Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );
        

        这给出了第一行的错误和以下行的堆栈:(Justin Cave 给出的示例的输出)

        ORA-20001: Error 1
        ORA-06512: at "SCOTT.X1", line 4
        ORA-06512: at "SCOTT.X2", line 5
        ORA-06512: at line 2
        

        【讨论】:

        • 最好使用 Dbms_Output.PUT,因为错误堆栈/跟踪已经包含换行符。
        【解决方案4】:

        或者你可以使用DBMS_DEBUG.PRINT_BACKTRACE

        【讨论】:

          猜你喜欢
          • 2014-01-11
          • 1970-01-01
          • 2016-08-08
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 2010-10-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多