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