3

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

4

2 回答 2

6

不幸的是,在运行时无法获得包装在包中的存储过程名称。任何方法,无论是$$PLSQL_UNIT查询指令还是dbms_utility包的FORMAT_ERROR_BACKTRACE函数,在独立存储过程的情况下都允许您这样做包裹。因此,您唯一的选择是使用例如捕获包名称和发生错误的行号。anonymous blockdbms_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
于 2012-10-05T07:04:09.327 回答
0

您的意思是获取所有在其来源中具有“异常”的程序吗?如果是这样,那么:

select distinct t.name from user_source t
where upper(t.text) like '%EXCEPTION%' or
  upper(t.text) like '%RAISE_APPLICATION_ERROR%';

我希望它可以帮助你:)

于 2012-10-16T17:01:54.207 回答