Oracleデータベースにおける一時表は、一時的にデータを保存するためのテーブルです。このテーブルはセッション内もしくはトランザクション内でのみ有効であり、他のユーザーから見えません。これは、一時的な処理や一時的なデータの保存に有用です。
一時表は大きく分けて、グローバル一時表とプライベート一時表の2種類があります。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
一時表の特徴
- 一時表に保存されたデータは、セッションが終了すると消えます。
- 一時表のデータは、一時セグメントに格納されます。
- デフィニションレベルはスティートメモリの上に保存されます。
- 利用者は一時表を使用する際に、自動的にUNDO空間を使用します。
通常の表との違い
| 特徴 | 通常の表 | 一時表 |
|---|---|---|
| データの保存期間 | 永続的 | セッションまたはトランザクションの間のみ |
| データの共有 | 全ユーザーで共有可能 | セッションまたはトランザクション内でのみ有効 |
| 使用するセグメント | 永続セグメント | 一時セグメント |
| UNDO空間の使用 | 利用しない(DML操作時のみ利用) | 自動的に利用 |
| 利用シーン | 長期的なデータ保存や業務データ管理 | 一時的なデータ処理や中間計算 |
グローバル一時表
グローバル一時表は、Oracleステートデータベース内で全ユーザーが共通で使用できる一時表のことを指します。作成時にCREATE GLOBAL TEMPORARY TABLEを使用します。
CREATE GLOBAL TEMPORARY TABLE temp_sales (
sale_id NUMBER,
product_name VARCHAR2(50),
amount NUMBER
) ON COMMIT PRESERVE ROWS;
ON COMMIT PRESERVE ROWS:トランザクション終了時にデータを保存します。ON COMMIT DELETE ROWS:トランザクション終了時にデータを削除します。
データの挿入と利用例(ON COMMIT DELETE ROWS)
-- データの挿入
INSERT INTO temp_sales (sale_id, product_name, amount)
VALUES (1, 'Laptop', 1000);
INSERT INTO temp_sales (sale_id, product_name, amount)
VALUES (2, 'Mouse', 50);
-- データの検索
SELECT * FROM temp_sales;
-- セッションが終了するとデータは消えます
COMMIT;
-- データの再検索はこれ以降には空になります
SELECT * FROM temp_sales;
SQL> CREATE GLOBAL TEMPORARY TABLE temp_sales ( ★グローバル一時表を作成
2 sale_id NUMBER,
3 product_name VARCHAR2(50),
4 amount NUMBER
5 ) ON COMMIT DELETE ROWS;
表が作成されました。
SQL> INSERT INTO temp_sales (sale_id, product_name, amount)
2 VALUES (1, 'Laptop', 1000);
1行が作成されました。
SQL> INSERT INTO temp_sales (sale_id, product_name, amount)
2 VALUES (2, 'Mouse', 50);
1行が作成されました。
SQL> SELECT * FROM temp_sales;
SALE_ID PRODUCT_NAME AMOUNT
---------- ------------------------------ ----------
1 Laptop 1000
2 Mouse 50
SQL> COMMIT; ★トランザクション終了
コミットが完了しました。
SQL> SELECT * FROM temp_sales; ★データが削除されている
レコードが選択されませんでした。
プライベート一時表
プライベート一時表は、同じデータベース内の利用者が自分のみで使用できる一時表です。作成時にはCREATE PRIVATE TEMPORARY TABLEを使用します。プライベート一時表はセッション内でのみ有効で、セッションが終了するとデータだけでなくテーブル定義も削除されます。
CREATE PRIVATE TEMPORARY TABLE ora$ptt_temp_sales (
sale_id NUMBER,
product_name VARCHAR2(50),
amount NUMBER
) ON COMMIT PRESERVE DEFINITION;
- プライベート一時表はテーブル名の先頭に
ora$ptt_を付ける必要があります。 ON COMMIT PRESERVE DEFINITION:トランザクション終了時にデータを保存します。ON COMMIT DROP DEFINITION:トランザクション終了時にデータを削除します。
注意点
- 一時表はUNDOスペースを使用するため、大量のデータを挿入する際にUNDO空間が不足する可能性があります。
- 一時表の定義はシステムカータログに保存されますが、データは一時的なものです。
- 一時表は、トランザクション内のみで動作を許されるため、多群プロセスによるコンテンツ共有には適しません。
- プライベート一時表は、セッション終了時に定義自体が削除されるため、一時的な用途でのみ使用することが推奨されます。
まとめ
一時表は、一時的なデータを保存し、データ処理を行うのに最適な機能です。ただし、使用上の制約やUNDOスペースの管理に注意する必要があります。通常の表との違いを理解し、グローバル一時表とプライベート一時表の違いも把握した上で、適切なシーンに適用してください。
[参考]
Oracle Databaseデータベース管理者ガイド 19c




コメント