
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の中で実行できる方法を教えていただく方法でも
当方が実施したいことはできるのでそれでもかまいません。
No.1ベストアンサー
- 回答日時:
SQLPLUSで投入したPL/SQL無名ブロック内でのエラーでも、「whenever sqlerror ~」で、
キャッチできますよ。少なくともWindows版SQLPUSは、そういう動作です。
発生源が、SQL文であっても、PL/SQL無名ブロックでも、ORA-nnnnnのエラーを拾わないと
「whenever sqlerror ~」の意味が無いですからね。
この回答への補足
whenever sqlerrorでハンドリングできるのは構文間違いやテーブルが存在しないといった
SQL*Plusとしてのエラーが発生したときだけで
二行ヒットや0件ヒットといったPL/SQLとしてEXCEPTION句にハンドリングされるようなエラー
はwhenever sqlerrorではハンドリングできずにPL/SQL部のEXCEPTION句内の処理を
実行した後に、その後のSQL部も実行されてしまうのではないでしょうか。
それで困っています。RAISE句などでORAエラーを起こせばwhenever sqlerrorにひっかかって
くれるんですかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQL PLS-00103エラーについて
-
ACCESSでパススルークエリにパ...
-
Oracle9 union使用時の結合制限...
-
ORA-06502のエラー
-
pro*c で pl/sql に変数を渡す...
-
DATABSE LINKについて
-
エラー「単一グループのグルー...
-
はじめまして!
-
SQLLOADER
-
シェルスクリプトでオラクルの...
-
HAVING句でのBETWEEN演算子
-
ORA-01843: 指定した月が無効で...
-
無効なSQL文の具体例を教えてく...
-
ora-01033 oracle intializatio...
-
ストアドファンクションの実行
-
エラーコード取得
-
OracleのDATE型について
-
「ORA-00907: 右カッコがありま...
マンスリーランキングこのカテゴリの人気マンスリー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のエラー
おすすめ情報