
シェルスクリプト上でsqlplusを起動し、さらにSQLの実行結果(エラーメッセージ)を取得するにはどのようにシェルをどのように記述すればよいでしょうか?
----------------------------------------
sqlplus scott/tiger@hoge
SQL>select * from dep;
*
1行でエラーが発生しました。
ORA-00942: 表またはビューが存在しません。
----------------------------------------
上記のようなコマンド実行とエラーメッセージの取得を行いたいのですが、シェルについては超初心者のためよく分かりません。
実行環境は以下の通りですが、ご存知の方教えて頂けないでしょうか。よろしくお願いします。
OS:Red Hat Linux 8.0
DB:Oracle8.1.7
No.3ベストアンサー
- 回答日時:
記載ミスをしました。
最後に(`)が必要です。受けとる変数=`sqlplus $USER_ID << ++EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE
select * from dep;
++EOF
`
>以下のようにバインド変数の使い方でエラーとなってしまい、シェルで正常終了となりません。
>これについてもお気づきの点がありましたらご指摘願えますでしょうか。
上記の例で、wheneverを書いていますが、これにより自前でEXITしなくとも、
SQLエラー時に自動的に脱出されます。
SQLエラーではないけれど、脱出したい時に、EXITを使うのがよろしいかと
思います。
お礼が送れまして大変申し訳ありません。
教えて頂いた方法で実行結果を取得できました。
シェルやPL/SQLの基本から勉強せねばと思ってます
ありがとうございました。
No.2
- 回答日時:
順不同にコメントを書いています。
>上記のような記述で正常、異常の判定はできることが分かったのですが
今のやり方で必ずしもエラーが判定できるとは思えません。
例えば、$USER_IDに嘘っぱちが入っていると、シェルの実行は、
途中で止まると思います。(再入力をSQLPLUSが要求するので・・)
>やはり、一旦結果を出力するしかないのでしょうか。
とりあえず、今の方法で問題ないレベルのエラーしかない前提で..
SPOOLを使わずとも、SQL*PLUSは結果とエラー内容を標準出力に
吐くので、それをシェル変数に受けとれば良いと思いますよ?
受けとる変数=`sqlplus $USER_ID << ++EOF
select * from dep;
EXIT :RETURNCODE
++EOF
ただ、想定するエラーのパターンですが、何でも拾えるように考えると
メッセージ行を選抜する方法が思いつきません。
ORA-nnnnnに限定するなら、#1で書かれているように
grepでフィルタすれば良いと思います。
ご回答ありがとうございました。
"$USER_ID"については実際のテストコードをそのまま載せてしまいました。失礼しました。
ID/PWについては正常にログインできるものとして質問させて下さい。
標準出力を変数に返す方法ですが、回答に書かれてある通り↓に実行してみたのですが、シンタックスエラーとなってしまいます。
RC=`sqlplus $USER_ID << ++EOF
"`"の使い方等の問題なのかもしれませんが、何かまずい点があれば教えて頂けないでしょうか。
さらに、別問題となるのですが、SQL結果が正常終了していても、以下のようにバインド変数の使い方でエラーとなってしまい、シェルで正常終了となりません。
これについてもお気づきの点がありましたらご指摘願えますでしょうか。
------------------------------------------------------------------
SQL>
PL/SQLプロシージャが正常に完了しました。
SQL> 使用方法: { EXIT | QUIT } [ SUCCESS | FAILURE | WARNING | n |
変数 | :バインド変数 ] [ COMMIT | ROLLBACK ]
------------------------------------------------------------------

No.1
- 回答日時:
SQL で SPOOL に結果を出力して
出力されたファイルの中を grep で検索する
検索文字は ORA- これでヒットすればエラーあり
としてみてはいかがでしょうか?
ご回答ありがとうございます。
やはり、一旦結果を出力するしかないのでしょうか。
実は、シェル実行結果がエラーの場合に特定のエラーログにメッセージを出力する共通コマンドが用意されていまして、
このコマンドの引数にオラクルのエラーコード、エラーメッセージ渡したい訳なのですが、処理結果を直接取得する方法はないものですかね。
-----------------------------------
sqlplus $USER_ID << ++EOF
select * from dep;
EXIT :RETURNCODE
++EOF
if [$? != 0]; then ....
-----------------------------------
上記のような記述で正常、異常の判定はできることが分かったのですが、オラクルの結果の取得方法が分かりません。
説明が至らずに、申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
sqlのエラーハンドリングについて質問です。
Oracle
-
バッチからsqlplusの接続エラーの検知について
その他(プログラミング・Web制作)
-
SQLPLUSで結果を画面に表示しない
Oracle
-
-
4
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
5
バッチファイルを使用したsql@plusの実行及びログ出力について
Oracle
-
6
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
7
PL/SQLでSPOOLさせたいのですが、可能でしょうか?
Oracle
-
8
oracleの文字コードとlinuxサーバの文字コードが異なる場合、サ
その他(コンピューター・テクノロジー)
-
9
oracle spool SJIS → UTF-8
Oracle
-
10
SQL*Plusで、コマンドの返答を非表示にする方法
Oracle
-
11
batファイルでのSQL(oracle)実行エラーについて
Oracle
-
12
Oracleでの文字列連結サイズの上限
Oracle
-
13
不明なコマンドです(FROM")。行の残りは無視されました。 のエラー"
Oracle
-
14
PL/SQLで@ファイル名が反応しません
Oracle
-
15
SQL*Plusの終了はquit?exit?
Oracle
-
16
エラーコード取得
Oracle
-
17
sqlplusでヘッダーが付かない
Oracle
-
18
【PL/SQL】FROM区に変数を使う方法
Oracle
-
19
OracleのSQL*PLUSで、データが折り返されて見づらいのですが。。。
その他(データベース)
-
20
SQL*Loader Append
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
はじめまして!
-
ORA-01843: 指定した月が無効で...
-
シェルスクリプトでオラクルの...
-
オラクル表領域データファイル...
-
PCC-S-02201エラーの対処を教え...
-
PL/SQL PLS-00103エラーについて
-
「ORA-00907: 右カッコがありま...
-
pro*c で pl/sql に変数を渡す...
-
ACCESSでパススルークエリにパ...
-
ORA-06502のエラー
-
HAVING句でのBETWEEN演算子
-
無効なSQL文の具体例を教えてく...
-
sqlのエラーハンドリングについ...
-
PL/SQLのコンパイルエラーにつ...
-
【Oracle】リモートでのimpコマ...
-
SQLLOADER
-
ストアドファンクションの実行
-
データベースのカラムの型がCHA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
はじめまして!
-
PL/SQL PLS-00103エラーについて
-
「ORA-00907: 右カッコがありま...
-
ORA-01843: 指定した月が無効で...
-
ORA-06502のエラー
-
PCC-S-02201エラーの対処を教え...
-
シェルスクリプトでオラクルの...
-
PL/SQLによるCREATE TABLE後のI...
-
DATABSE LINKについて
-
PL/SQLのコンパイルエラーにつ...
-
エラーコードについて
-
SQLLOADER
-
sqlのエラーハンドリングについ...
-
ビューが作成できない
-
データベースのカラムの型がCHA...
-
ORA-12571パケット書き込みエラ...
-
PL-SQLでORA-01013エラー
-
PL/SQLでPLS-00201のエラー
おすすめ情報