PL/SQL
に複数のネストされたブロックがありますが、エラーが発生した場合は、それぞれのネストされたレベルでそれを投げます。内部ブロックの例外(RAISE
)の例外を再スローするたびに、DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
は、例外が最後に発生したポイント(トップレベルへの途中のネストされたブロックの1つ)にスタックをリセットします。私は例外が最初に発生したポイントから完全なスタックトレースを取得する方法を見つけることができませんでした。中間ブロックで再スローする前にロギング以外の完全なスタックトレースを取得する方法はありますか?PL/SQLで再スローされた例外のスタックトレースを取得する(例外の発生元から)
1
A
答えて
1
私はあなたに何をしようとしているのか分かりますが、これは必要ないということに同意します。トップレベルのハンドラでは、呼び出されたスタック全体をプログラムの行とエラー行にバックトレースできます。
RAISEステートメントは、あなたがやっていることに対するキラーです。すぐに実際のエラー位置を失いました。
0
実際には、コール・スタック全体を取得するには、DBMS_UTILITY.FORMAT_CALL_STACK()とDBMS_UTILITY.FORMAT_ERROR_BACKTRACE()の組み合わせを使用します。 FORMAT_CALL_STACKはエラーハンドラまでのトップレベルコールを表示し、FORMAT_ERROR_BACKTRACEはエラーハンドラからエラープロシージャとコード行まで(正確に)表示します。
FORMAT_CALL_STACKの唯一の欠点は、行番号が必ずしも期待通りではなく、エラーハンドラを指していることです。
関連する問題
- 1. 例外が処理されなかった - 再スロー例外
- 2. C++例外でスタックトレースを取得する
- 3. 除外された例外ハンドラのコードで例外が発生するとNullReferenceExceptionがスローされる
- 4. 例外から例外をスローする
- 5. Rubyで例外を発生させずに現在のスタックトレースを取得
- 6. Java再スロー例外
- 7. 例外のスローまたは再スロー?
- 8. スタックトレースでキャッチされた例外
- 9. スローされた例外(処理された例外も含む)についての通知を取得する
- 10. スローされ、取り込まれた例外をCurrencyManagerから取得します
- 11. 例外からのトレースバックを再発生せずに取得する
- 12. 送信されたPOSTからの変数の例外のスロー例外
- 13. カスタム生成されたサウンドを再生する - AudioTrack.playが例外をスローする
- 14. 例外タイプ、メッセージ、スタックトレースをフォーマットするためのnlog例外レイアウト
- 15. 例外を発生させるか例外を発生させる
- 16. GWT例外スタックトレース
- 17. SQL例外オブジェクトから例外を発生させたフィールドとテーブル名の取得
- 18. メールのスタックトレースが発生した場合の例外
- 19. テスト中にスローされた例外からカスタム属性を取得する
- 20. 例外(sigar例外)インポート後にエラーが発生することをスローする
- 21. ruby - サブ例外を使用して例外を再発生
- 22. コントローラーで実行されたコマンドから例外をスローする
- 23. PLSQL例外処理
- 24. =例外をスローする例外
- 25. 子オブジェクトと親オブジェクトに例外がスローされた場合の両方の例外を取得する方法
- 26. 神秘的にスローされた例外を再現する
- 27. 例外を再発生させる点は何ですか?
- 28. Struts "org.apache.struts.action.RequestProcessor - スローされた未処理の例外" - 完全なスタックトレースを取得するには?
- 29. 処理された/捕らえられた例外からスタックトレースを取得してトレースログにダンプする方法
- 30. Assembly.Load - スローされた例外:mscorlib.dllの 'System.BadImageFormatException'
例外をキャッチして再スローすると、エラースタックが再度発生したポイントまでエラースタックがリセットされます。最初に例外をマスクしているのは、内側のブロックで例外が処理されなかった場合、正しいエラーと元の行でトップレベルまで次のレベル/外側のブロックに自動的に伝播されます。 – ivanzg
中間ブロックでの例外のロギング。 – fg78nc
もう一度、中間ブロックでエラーを処理してそれを捕まえて再発生させない場合のポイントは何ですか?例外は、中間ブロックを介して処理できる最上位レベルまで自動的に伝播されます。 – ivanzg