データベース備忘録

※自分調べ

Oracleでこれコミットしなくて良いの?って思った日

とあるテーブルにレコードをINSERT

INSERT後、確認のためにSELECT

 

INSERTのSQLファイルには「insert~」の一文しか入っていないにも関わらず、SELECTのSQLファイルを実行したらちゃんと更新されている。。。

 

SELECTのSQLファイルにもcommitは書いてない。。。

 

なんでだ…と思ってコミットタイミングを調べてみる

次のような状況では、Oracle Databaseによって暗黙的なCOMMITが発行されます。

  • 構文が有効なデータ定義言語(DDL)文の前(文がエラーになる場合も同様)

  • エラーが発生することなく完了するデータ定義言語(DDL)文の後

 

DDL…?

SELECTのSQLファイルをよく見てみると

 

ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD HH24:MI:SS';

 

みたいなDDLを打っていた

(対象のテーブルに日付カラムがあったから)

 

なるほど納得

commitを明示的に打たなくてもこういうDDLを打っておくことで暗黙的にcommitできるのは便利かも