2012年6月10日日曜日

[Oracle]PL/SQLでエラー発生時にcallStackを取得する

DBMS_UTILITY.FORMAT_ERROR_BACKTRACEファンクションを使用すると、PL/SQLのEXCEPTIONブロックでエラー発生時のcallStackを取得できる。

下のコードでは、無名ブロック→hoge1→hoge2の順で呼び出していき、hoge2でエラーが発生します。
そのエラーを無名ブロックで補足して、「format_error_backtrace」を使用してcallStackeを表示するとエラー発生箇所までどのように呼び出されてきたかを確認できます。
11:08:43 SQL> r
  1  declare
  2    procedure hoge2 is
  3    begin
  4      raise no_data_found;
  5    end;
  6    procedure hoge1 is
  7    begin
  8      dbms_output.put_line('hoge1');
  9      hoge2;
 10    end;
 11  begin
 12    hoge1;
 13  exception
 14    when others
 15    then
 16       dbms_output.put_line(dbms_utility.format_error_backtrace); -- format_error_backtraceを使用して、callStackを表示する。
 17* end;
hoge1
ORA-06512: at line 4
ORA-06512: at line 9
ORA-06512: at line 12
PL/SQL procedure successfully completed.