一時表ならではのメリット

セッションやトランザクションの終了時にテーブルデータが削除される機能で、
処理後にデータを残さず、一時的にデータを扱いたい場合に有効。
通常のワークテーブルを作成する手もありますが、パージなどワークテーブルに
対するメンテ処理も必要になってくる。トランザクションやセッション単位で、
自動削除してくれる一時表は、使い方次第でかなりメリットがある。

構文

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 の場合、手動で削除したわけではないのに、
セッションが終了したら、データが削除される。

※ 双方ともに、テーブル定義は残る。

関連記事