3

PLSQLで例外が発生した場合のプロシージャ/関数名を取得するにはどうすればよいですか。パッケージに問題があるプロシージャのログを作成するためにこれが必要です。

4

2 に答える 2

6

残念ながら、実行時にパッケージにラップされたストアドプロシージャ名を取得する方法はありません。$$PLSQL_UNITクエリディレクティブであれ、dbms_utilityパッケージのFORMAT_ERROR_BACKTRACE関数であれ、スタンドアロンのストアドプロシージャの場合にそれを実行できるメソッドは、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
于 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 に答える