静的SQLでエラーを起こしたSQLを取得したい。
Oracle10.2.0.4
現在、バッチ処理の中でSQLエラー(一意制約違反や桁あふれなど)を起こしたSQLを取得すべく
動的SQLを使用しております。
具体的に申しますと、下記のようなイメージです。
vSQL varchar2(10000);
vSQL := 'SQL文';
execute immediate vSQL ;
そしてSQLエラーが発生すると、exception句に制御が移るので
そこで変数vSQLをログファイルに出力してエラーが発生したSQLを特定しています。
それはそれでいいのですが、静的SQLでも同様なことができないかと思っております。
動的SQLだとバインド変数を加味しないといけないのが(パラメタが多いと)大変なんです。
またカーソルシェアリングパラメタはデフォルトのexactから変えたくありません。
あと、トレースログへの出力もパフォーマンスを考慮してデフォルトの必要以上はしたくありません。
静的SQLなら正常にパースできた分ならv$SQLを参照して直前に実行したSQL文を取得できますが
エラーとなったSQLだとどうやって取得したらいいのか、はたまた取得できなないものなのかすら検討がつきません。
できるかできないかだけでも結構ですので、ご教授いただけたらと思います。
できないのであれば、納得してバインド変数を指定できますので。