次の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(*)
---------
1ON COMMIT句の指定
| 指定 | 行が削除されるタイミング | 今回の結果 |
|---|---|---|
| ON COMMIT DELETE ROWS | トランザクションの終了時(既定) | 1 |
| ON COMMIT PRESERVE ROWS | セッションの終了時 | 4 |