SQL*Plus 暗黙のコミット
SQL*Plusから表の複数のデータを更新しました。
トランザクションがコミットされる場合を、(A)〜(E)の中からすべて選んで下さい。
(A).SQL*PlusをQUITコマンドで終了した
(B).DDL文を実行した
(C).SQL*Plusが異常終了した
(D).SQL*PlusをEXITコマンドで終了した
(E).システム障害が発生した
【解答】
(A).(B).(D)
暗黙のコミットについて
・commit文を実行して明示的にトランザクションをコミットする以外に、
以下の場合、暗黙にトランザクションがコミットします。
(1).DDL文を実行した場合
(2).SQL*PlusをEXIT又はQUITコマンドで終了した場合
・以下の場合には、コミットではなく、ロールバックします。
(1).SQL*Plusが異常終了した場合
(2).システム障害が発生した場合
<参考> SQL*Plusを終了する場合に、EXITコマンドではなく、ウィンドウ
を閉じるで終了するとSQL*Plusの異常終了としてロールバックします。
<参考> SQL*Plusでは、システム変数のAUTOCOMMITで、コミットタイミング
を制御することができます。
構文:SET AUTOCOMMIT { ON | OFF | IMMEDIATE | n }
パラメータ:
ON : 自動コミット機能をオンにします
OFF : 自動コミット機能をオフにします(デフォルト)
IMMEDIATE : ONと同じ
n : DMLの実行回数(1つのPL/SQLブロックは、1つのトランザクション)
例:以下の場合、1つのDMLコマンドごとにコミットされ、ロールバックできません
SET AUTOCOMMIT ON