Oracle PL/SQL: how to get the stack trace, package name and procedure name Oracle PL/SQL: how to get the stack trace, package name and procedure name oracle oracle

Oracle PL/SQL: how to get the stack trace, package name and procedure name


You probably want DBMS_UTILITY.FORMAT_ERROR_BACKTRACE function

SQL> edWrote 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 4ORA-06512: at "SCOTT.P2", line 5ORA-06512: atline 2PL/SQL procedure successfully completed.


I use the combination of DBMS_UTILITY.FORMAT_ERROR_STACK and DBMS_UTILITY.FORMAT_ERROR_BACKTRACE. (Improving the answer of Justin Cave)

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

This gives the error on the first line and the stack on the following lines: (output from the example given by Justin Cave)

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