
シェルスクリプト上で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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
このQ&Aを見た人はこんなQ&Aも見ています
-
sqlのエラーハンドリングについて質問です。
Oracle
-
バッチからsqlplusの接続エラーの検知について
その他(プログラミング・Web制作)
-
SQLPLUSで結果を画面に表示しない
Oracle
-
-
4
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
5
バッチファイルを使用したsql@plusの実行及びログ出力について
Oracle
-
6
oracle spool SJIS → UTF-8
Oracle
-
7
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
8
oracleの文字コードとlinuxサーバの文字コードが異なる場合、サ
その他(コンピューター・テクノロジー)
-
9
SQL*Plusで、コマンドの返答を非表示にする方法
Oracle
-
10
PL/SQLでSPOOLさせたいのですが、可能でしょうか?
Oracle
-
11
不明なコマンドです(FROM")。行の残りは無視されました。 のエラー"
Oracle
-
12
batファイルでのSQL(oracle)実行エラーについて
Oracle
-
13
SQL*Plusの終了はquit?exit?
Oracle
-
14
PL/SQLで@ファイル名が反応しません
Oracle
-
15
Oracleでの文字列連結サイズの上限
Oracle
-
16
エラーコード取得
Oracle
-
17
データ削除とSQL*Loaderでのインポート
Oracle
-
18
sqlplusでヘッダーが付かない
Oracle
-
19
SQL*Loader Append
Oracle
-
20
Viewにインデックスは張れますか?
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQL PLS-00103エラーについて
-
PCC-S-02201エラーの対処を教え...
-
「ORA-00907: 右カッコがありま...
-
DATABSE LINKについて
-
PL/SQLによるCREATE TABLE後のI...
-
はじめまして!
-
SQL*Loaderについて2
-
ORA-01843: 指定した月が無効で...
-
データベースのカラムの型がCHA...
-
調べ方を教えてください
-
sqlのエラーハンドリングについ...
-
外部ライブラリのロード中にエ...
-
ビューが作成できない
-
ORA-00979エラーについて
-
ORA-06502のエラー
-
HAVING句でのBETWEEN演算子
-
エラー「単一グループのグルー...
-
オブジェクトが必要ですのエラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PL/SQL PLS-00103エラーについて
-
CASE文のエラーについて
-
ORA-01843: 指定した月が無効で...
-
はじめまして!
-
PCC-S-02201エラーの対処を教え...
-
「ORA-00907: 右カッコがありま...
-
ORA-06502のエラー
-
シェルスクリプトでオラクルの...
-
PL/SQLによるCREATE TABLE後のI...
-
PL/SQLのコンパイルエラーにつ...
-
ACCESSでパススルークエリにパ...
-
データベースのカラムの型がCHA...
-
ビューが作成できない
-
HAVING句でのBETWEEN演算子
-
ORA-12571パケット書き込みエラ...
-
無効なSQL文の具体例を教えてく...
-
pro*c で pl/sql に変数を渡す...
-
PL/SQLでPLS-00201のエラー
-
エラーコードについて
おすすめ情報