- PR -

実行エラーが起きたらSQLファイルを終了させる

1
投稿者投稿内容
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-07-31 16:51
お世話になっております。

Window+Oracle10gでSQL文を実行することをしています。
SQL文はxxx.sqlというファイルに複数定義しており
xxx.sqlはbatファイルより
sqlplus <username>/<password>@<connect_identifier> @xxx.sql
と言う風に実行されています。
xxx.sqlは次のような記述がされています。

DELETE FROM T_SAMPLE1 WHERE ID='1001';
DELETE FROM T_SAMPLE1 WHERE ID='1002';
DELETE FROM T_SAMPLE2 WHERE ID='1001';
DELETE FROM T_SAMPLE2 WHERE ID='1002';
COMMIT;
EXIT;


現在のままですと、T_SAMPLE2 が存在していない場合
ORA-00942: 表またはビューが存在しません。
が発生することはしますが、そこで止まらず
そのままCOMMITが行われてしまいます。
理想はエラーが発生した場合、そこでロールバックし終了することです。
そして、呼び出し元にエラーが出たことを通知できるとことです。

質問)
エラー発生時にロールバックさせ終了させるようなことは可能でしょうか。
そして、呼び出し元にエラーが出たことを通知することは可能でしょうか。

何かヒントをいただけると幸いです。
よろしくお願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-07-31 17:08
つwhenever sqlerror

暇じゃないけど現実逃避的に追記:

コード:

SQL> create table test (col1 number constraint pk_col1 primary key);

表が作成されました。



コード:

<testerr.sql>
whenever sqlerror exit failure rollback
insert into test values (1);
insert into test values (2);
insert into test select * from test; <== ここでエラーになればすぐ終わる筈
insert into test select * from test;
commit;
exit



コード:

% sqlplus -s foo/bar @testerr.sql

1行が作成されました。


1行が作成されました。

insert into test select * from test
*
行1でエラーが発生しました。:
ORA-00001: 一意制約(FOO.PK_COL1)に反しています


% echo $status <== シェルが csh なので。sh とか DOS とかは適宜置き換えて。
1
% sqlplus foo/bar

SQL*Plus: Release 9.2.0.8.0 - Production on 火 Jul 31 17:18:41 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.



Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning option
JServer Release 9.2.0.8.0 - Production
に接続されました。
SQL> select * from test;

レコードが選択されませんでした。




_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2007-07-31 17:29 ]
1

スキルアップ/キャリアアップ(JOB@IT)