LoginSignup
1
0

More than 3 years have passed since last update.

SQL*Plus終了時のトランザクションを制御する(Oracle Database 19c)

Last updated at Posted at 2020-08-04

SQL*Plusを終了する際に実行中のトランザクションを制御する方法について記述しています。

SQL*Plusの設定

COMMIT文やROLLBACK文を実行する以外に、SQL*Plusにはトランザクションの制御を行う設定がいくつかあります。

自動コミット

AUTOCOMMIT システム変数をONに変更すると、INSERT/DELETE/UPDATE文が正常に実行されると直ちにコミットされます。デフォルト値はOFFです。

終了時のコミット

SQL*Plus終了時に実行中のトランザクションをコミットするかロールバックを行うかを設定するシステム変数があります。EXITCOMMITシステム変数をOFFに設定すると、SQL*Plus終了時にロールバックが実行されます。デフォルトはONで、SQL*Plus終了時に自動的にトランザクションがコミットされます。

SQL> SHOW EXITCOMMIT
exitcommit ON
SQL> SHOW AUTOCOMMIT
autocommit OFF
SQL>

EXITコマンドの指定

SQL*Plusを終了する際にはEXITコマンドを実行します。EXITコマンドにCOMMITまたはROLLBACKを指定すると、システム変数EXITCOMMITの値を上書きできます。指定しない場合にはシステム変数EXITCOMMITの値に従います。

SQL> EXIT COMMIT
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0との接続が切断されました。
$

エラー発生時の設定

SQL*Plus内でエラーが発生した時に自動的的にSQL*Plusを終了する場合はWHENEVER SQLERRORコマンドまたはWHENEVER OSERRORコマンドにEXIT句を指定します。
EXIT句に更にCOMMITまたはROLLBACK句を指定しない場合、システム変数EXITCOMMITの値が使われます。下記の例ではSQL文のエラーが発生した場合にはSQL*Plusを終了し、実行中のトランザクションは強制亭にロールバックします。

SQL> WHENEVER SQLERROR EXIT ROLLBACK;
SQL> INSERT INTO data1 VALUES (0, 'SUCCESS');

1 row created.

SQL> INSERT INTO data1 VALUES (0, 'FAIL');
INSERT INTO data1 VALUES (0, 'FAIL')
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.PK_DATA1) violated


Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
$ echo $?
0
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0