こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2012-01-23 13:29:25

QNo.7261690

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは。

>spoolコマンドで試してみたところ
whenever oserrorが定義されていても
SP2-0322
のメッセージは出力されるのです。。

えーと・・・、「SP2-00332」じゃなくて?
コマンド実行後です・・・。

ついでに、
>SP2-0130
「SP2-00310」じゃなくて?

投稿日時 - 2012-01-23 17:13:13

補足

すみません、ご指摘のとおりです。

whenever oserrorが定義されていても出力されるメッセージ
SP2-00332 スプール・ファイルを作成できません。

whenever oserrorが定義されていたら出力されないメッセージ
SP2-00310 ファイルfile_nameをオープンできません。

投稿日時 - 2012-01-23 18:32:46

ANo.1

こんにちは。

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

投稿日時 - 2012-01-23 16:31:19

補足

taka451213様

説明不足で大変申し訳ありません。。
spoolコマンドで試してみたところ
whenever oserrorが定義されていても
SP2-0322
のメッセージは出力されるのです。。

start(@)コマンドだけ何か特別なのでしょうか??

投稿日時 - 2012-01-23 16:40:27

あなたにオススメの質問