• 締切済み

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

  • Oracle
  • 回答数2
  • ありがとう数0

みんなの回答

回答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

  • SQLのSP2-エラーについて

    SQLの実行に失敗した際に出力される「SP2-」で始まるエラーは何があるか調べています。「ORA-」や「PLS-」のようにエラーメッセージ集のようなドキュメントはないのでしょうか。OTNで探したのですが見つかりませんでした。

  • SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

    SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。 イメージ sqlplus scott/tiger << EOF   declare     aaa number;   begin     -- *1     select col1 into aaa from test1;   end;   /   -- *2   define a=1   define b=1   @test.sql EOF ここで*1にて例えば複数行が返ってくるなどのエラーが 発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが どのようにすればよいかわかりますでしょうか。 whenever sqlerror exit 255 などはPL/SQL内の論理エラーはハンドリングしてくれないようです。 よろしくお願いします。 それかdefineや@マーク指定によるsqlファイルの取り込みを PL/SQLの中で実行できる方法を教えていただく方法でも 当方が実施したいことはできるのでそれでもかまいません。

  • エラーコード取得

    バッチファイルにて実行するSQLファイルで以下の処理を行っています。 --------------------------------------- SELECT COUNT(*) as count_num FROM TEST_TABLE if(count_num)=0 then EXIT; --------------------------------------- 上記の処理でSQLエラー発生時はEXITするといった 処理にしたいのですが、エラーコード取得方法が わかりません! どなたかご教授お願い致します。 -環境- WindowsXP SP2 Oracle 10.1.0.2

  • オラクル(PL/SQL)のエラー

    いつもお世話になります。 オラクル・バージョン8.1.5を使用しています。 PL/SQLを実行すると以下のエラーが発生します。色々調べたのですが、解決しません。 なぜでしょうか?(ロジックがここでは書けないので、エラーのみ記載致します) ORA-06550:行1、列19:*PLS-00103: Encountered the symbol "." when expecting one of the following・・()-+mod この後ろは読めませんでした。 また、PL/SQLを実行したりするには、ただ単にオラクルをインストールしただけでは駄目なのでしょうか? よろしくお願い致します。

  • SQL実行エラー

    VBでオラクルを使ったアプリケーションをテストしているのですが、 次のようなエラーが出てとまってしまいます。 SQL実行エラー ORA-01801  日付形式が内部バッファに対して長すぎます。 原因はいったい何なのでしょうか? 知っている方がいらしたら教えてください。 宜しくお願いいたします。

  • オラクルDBからのデータ取得について

    こんばんわ。 オラクル(sqlplus)についての質問2点です。 (1)シェルからオラクルDBへアクセスし、データを取得したいのですが、  select時に、結果のヘッダーをつけずに結果(データ)のみをファイル出力することは可能でしょうか? (DB2で言うところの「-x」オプションのような・・・) (2)エラー時にSQLコードを取得したいのですが、SQLコードをファイル出力することは可能でしょうか? オラクルは初心者で、行き詰まってしまいました・・・ どうかよろしくお願いします。

  • ORAー12560:TNS:protocol adapter error

    初心者です。ORACLE9iをインストールしました。コマンドラインから sqlplus /nolog SQL>connect /as sysdba と実行しますが、ERROR:ORAー12560:TNS:protocol adapter error となり接続出来ません。スタートメニューからSQL Plusを起動しても同エラーとなります。ORACLE関係のサービスは起動しており、ログインユーザはORACLEをインストールしたユーザでORA_DBAグループにも登録されています。OS再起動を実施しても同エラーです。OSはwindows2000Proです。どこをチェックすれば宜しいでしょうか。

  • ORACLE init.oraの設定

    ORACLEのパラメータを変更するために、init.oraの設定を行いたいのですが、以下のコマンドをSQLPLUSで実行するのですがエラーになってしまいます。 どのようにしたら実行できるのでしょうか? 教えてください。 SQL> startup pfile=E:\oracle\admi ORA-01031: 権限が不足しています。 使用環境    ORACLE VERは9.2.0.1.0    OS   XP 宜しくお願いします。

  • Sql developer .sqlファイル実行

    SQL developerから、.sqlファイルの実行はできないのでしょうか? 家のパソコンに、vurtual Box でwindows上にLinuxをインストールして、そこにOracleを乗っけて勉強しています。 単純に、spcreate.sql を開きたかっただけなのですが、 windows上から、Sqlplusで下記を実行した場合 @?/rdbms/admin/spcreate.sql は、ちゃんとファイルを開くことができます。 しかしwindows上の、SQLdeveloperからは、上記の方にコマンドをうっても、 エラーが発生しました。ファイルが開けません。 とでてきます。 これは、sqldeveloperは、ファイルを開くようなことができない仕様になっているということでしょうか? よろしくお願いいたします。

  • SQL*Loaderで「オブジェクトが存在しない」というエラーが出ます

    SQL*Loaderでデータをインサートしたいのですが、 オブジェクトがあるのに、 「SQL*Loader-941: 表~の記述中にエラーが発生しました。 ORA-04043: オブジェクト~は存在しません。」というエラーが出力されます。 何が原因なのでしょうか? すみませんが教えて下さい!お願いします!