一時表ならではのメリット
セッションやトランザクションの終了時にテーブルデータが削除される機能で、
処理後にデータを残さず、一時的にデータを扱いたい場合に有効。
通常のワークテーブルを作成する手もありますが、パージなどワークテーブルに
対するメンテ処理も必要になってくる。トランザクションやセッション単位で、
自動削除してくれる一時表は、使い方次第でかなりメリットがある。
構文
create global temporary table テーブル名
[on commit delete rows | on commit preserve rows]
on commit オプションで一時表のデータ保持ポリシーを設定可能で、
delete rows か preserve rows を指定する。
on commit delete rows
トランザクション終了時にデータを削除する
on commit preserve rows
セッション終了時にデータを削除する
トランザクション終了時にデータを削除
SQL>
create global temporary table test(
col1 number,
col2 number)
on commit delete rows;
表が作成されました。
SQL> insert into test values(10, 10);
1行が作成されました。
SQL> insert into test values(20, 20);
1行が作成されました。
SQL> select * from test;
COL1 COL2
---------- ----------
10 10
20 20
SQL> commit;
コミットが完了しました。
SQL> select * from test;
レコードが選択されませんでした。
セッション終了時にデータを削除
SQL>
create global temporary table test(
col1 number,
col2 number)
on commit preserve rows;
表が作成されました。
SQL> insert into test values(10, 10);
1行が作成されました。
SQL> insert into test values(20, 20);
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> select * from test;
COL1 COL2
---------- ----------
10 10
20 20
SQL> exit
終了後、別セッションで接続する
SQL> sqlplus hoge/hoge@ORCL 接続されました。 SQL> select * from test; レコードが選択されませんでした。 SQL> drop table test; 表が削除されました。
Oracle一時表オプションのまとめ
on commit delete rows の場合、手動で削除したわけではないのに
トランザクション終了がしたら、データが削除される。
on commit preserve rows の場合、手動で削除したわけではないのに、
セッションが終了したら、データが削除される。
※ 双方ともに、テーブル定義は残る。

