如何在PLSQL中获取发生异常的过程/函数名称?

mjs*_*jsr 3 oracle plsql exception

如何获取PLSQL中发生异常的过程/函数名称?我需要这个来创建一个包中有问题的过程的日志.

Nic*_*nov 6

遗憾的是,在运行时无法获取包装在包中的存储过程名称.任何方法,无论是$$PLSQL_UNIT查询指令或FORMAT_ERROR_BACKTRACE的功能DBMS_UTILITY包,允许你做,在一个单独的存储过程的情况下,将永远给你的anonymous block,而不是被裹在一个存储过程的情况下,一个名字包裹.因此,您唯一的选择是通过使用dbms_utility.format_error_backtrace例如捕获包名称和发生错误的行号.

SQL> create or replace package some_pkg
  2  as
  3    procedure some_proc;
  4  end;
  5  /

Package created

SQL> 
SQL> create or replace package body some_pkg
  2  as
  3     procedure Some_Proc
  4     is
  5       l_var number;
  6     begin
  7       l_var := 1/0;
  8     exception
  9       when others
 10       then dbms_output.put_line(dbms_utility.format_error_backtrace);
 11     end;
 12  end;
 13  /

Package body created

SQL> exec some_pkg.some_proc;

ORA-06512: at "HR.SOME_PKG", line 7
Run Code Online (Sandbox Code Playgroud)