プロシージャのリストをループして動的に呼び出す Oracle パッケージがあります。各プロシージャ コールの前に SAVEPOINT が作成され、例外が発生した場合は、ロールバックが発行され、問題がログに記録されます。最近、動的プロシージャの 1 つに COMMIT が追加されたバグが発生しました。これがトリガーされると、SAVEPOINT が無効になります。その後、同じ手順が失敗し (例外が発生し)、呼び出し元のパッケージの例外ハンドラーがロールバックを試みた場合、例外ハンドラー ブロック内で次の例外が発生します。
ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is invalid
ここで、例外ハンドラーに別の例外ハンドラーを配置して、この特定の例外を処理することができますが、SAVEPOINT を発行しようとする直前に、それが有効かどうかを確認するために SAVEPOINT をすばやくチェックできれば、はるかにうまくいきます。ロールバック。これは可能ですか?