- 締切済み
sqlのエラーハンドリングについて質問です。
シェルからsqlplusを実行し、そのsqlplusで発生したエラーをハンドリングするために、 出力内容をORACLEエラーコード(ORA-xxxxx)、SQLPLUSエラーコード(SP2-xxxxx) で検索して判定しています。 また、SQLで何らかのエラーが発生した際に処理を終了させるために、 SQL実行前に whenever sqlerror exit; whenever oserror exit; を定義しています。 何らかのエラーが発生した際は、ORACLEエラーコード(ORA-xxxxx)、SQLPLUSエラーコード(SP2-xxxxx) が出力されるため、エラーハンドリングは可能と考えているのですが、 sqlplusのstartコマンドでsqlファイルを実行した場合のみ、エラーコードが出 力されないため、ハンドリングできません。 ■実行例 SQL> start 存在しないsqlファイル O/Sメッセージ:No such file or directory 切断しました。 試しにwhenever oserror exit;の記述を削除したところ SP2-0130が出力されエラーハンドリングできました。 whenever oserror exit; の記述があるとエラーコードが出力されないのはなぜでしょうか??
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 >spoolコマンドで試してみたところ whenever oserrorが定義されていても SP2-0322 のメッセージは出力されるのです。。 えーと・・・、「SP2-00332」じゃなくて? コマンド実行後です・・・。 ついでに、 >SP2-0130 「SP2-00310」じゃなくて?
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 そりゃまぁ、OSが先にファイルを探しに行ってエラーになってるので、 コマンド自体が実行されていないからです・・・はい。
補足
taka451213様 説明不足で大変申し訳ありません。。 spoolコマンドで試してみたところ whenever oserrorが定義されていても SP2-0322 のメッセージは出力されるのです。。 start(@)コマンドだけ何か特別なのでしょうか??
補足
すみません、ご指摘のとおりです。 whenever oserrorが定義されていても出力されるメッセージ SP2-00332 スプール・ファイルを作成できません。 whenever oserrorが定義されていたら出力されないメッセージ SP2-00310 ファイルfile_nameをオープンできません。