含まれている SQL ファイルにエラーが発生した場合に、Oracle 11g でトランザクション全体をロールバックするにはどうすればよいですか?
ファイルの内容は次のとおりです。
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
drop index PK_NOT_EXIST;
commit;
そして、ファイルは "@" を使用して sqlplus セッションに含まれます。
@error.sql
予想どおり、sqlplus セッションは終了し、出力は次のようになります。
SQL> @error.sql
1 row created.
1 row created.
drop index PK_NOT_EXIST *
ERROR at line 1:
ORA-01418: specified index does not exist
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
しかし、sqlplus を再起動すると、テーブルには 2 つのレコードが含まれます。これは、sqlplus の終了時にロールバックではなくコミットがあったことを意味します。
どうにかしてsqlplusに次のことを強制できますか:
- エラー時にファイルの処理を停止し、
- エラー時にトランザクション全体をロールバックしますか?