• 締切済み

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; の記述があるとエラーコードが出力されないのはなぜでしょうか??

みんなの回答

回答No.2

こんにちは。 >spoolコマンドで試してみたところ whenever oserrorが定義されていても SP2-0322 のメッセージは出力されるのです。。 えーと・・・、「SP2-00332」じゃなくて? コマンド実行後です・・・。 ついでに、 >SP2-0130 「SP2-00310」じゃなくて?

kaka1010
質問者

補足

すみません、ご指摘のとおりです。 whenever oserrorが定義されていても出力されるメッセージ SP2-00332 スプール・ファイルを作成できません。 whenever oserrorが定義されていたら出力されないメッセージ SP2-00310 ファイルfile_nameをオープンできません。

回答No.1

こんにちは。 そりゃまぁ、OSが先にファイルを探しに行ってエラーになってるので、 コマンド自体が実行されていないからです・・・はい。

kaka1010
質問者

補足

taka451213様 説明不足で大変申し訳ありません。。 spoolコマンドで試してみたところ whenever oserrorが定義されていても SP2-0322 のメッセージは出力されるのです。。 start(@)コマンドだけ何か特別なのでしょうか??

関連するQ&A