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