DDLを使用した表とそのリレーションシップの管理45 / 50 問

次のSQL文を同じセッションで順番に実行しました。最後のSELECT文の結果はどれですか。

CREATE GLOBAL TEMPORARY TABLE work_tmp (
  id  NUMBER
) ON COMMIT DELETE ROWS;

INSERT INTO work_tmp VALUES (1), (2), (3);
COMMIT;

INSERT INTO work_tmp VALUES (4);

SELECT COUNT(*) FROM work_tmp;
A0
B1✓
C4
Dエラーになる
正解:B解説

一時表のデータは、挿入したセッションからしか参照できず、一定のタイミングで自動的に削除されます。削除されるタイミングはON COMMIT句で指定します。
ON COMMIT DELETE ROWSはトランザクションの終了時(COMMIT時)に行を削除するため、1〜3の行はCOMMITで削除されます。COMMIT後に挿入した4の行だけが残るため、結果は1です。

SELECT COUNT(*) FROM work_tmp;

COUNT(*)
---------
1

ON COMMIT句の指定

指定行が削除されるタイミング今回の結果
ON COMMIT DELETE ROWSトランザクションの終了時(既定)1
ON COMMIT PRESERVE ROWSセッションの終了時4

前後の問題