Oracleの一時テーブルは?
Oracleの一時テーブルの特徴
Oracleの一時テーブル(Global Temporary Table, GTT)は、一時的なデータを格納するための特別なテーブルであり、通常のテーブルとは異なる以下の特徴を持ちます。
- データの一時性
- 一時テーブル自体は永続的に存在するが、データは一時的であり、セッションまたはトランザクションが終了すると削除される。
- スコープの種類
ON COMMIT DELETE ROWS(トランザクション単位)
トランザクションがコミットされるとデータが削除される。ON COMMIT PRESERVE ROWS(セッション単位)
セッションが終了するまでデータが保持される。
- 他のユーザーからデータが見えない
- 一時テーブルに格納されたデータは、そのセッションまたはトランザクション内でのみ有効であり、他のユーザーからは見えない。
- UNDO・REDOログの扱い
- UNDO(ロールバック情報)は最小限しか記録されず、REDOログへの書き込みも通常のテーブルより抑制されるため、パフォーマンスが向上する。
- 索引(INDEX)の作成
- 一時テーブルに対してインデックスを作成できるが、索引データも一時的であり、通常のテーブルの索引とは異なる。
- 統計情報の収集
- 通常の
ANALYZEやDBMS_STATSを使用して統計情報を収集できるが、実際に使用されるデータが変化するため、統計情報の扱いには注意が必要。
- 通常の
以下は、PL/SQLを使用してOracleの一時テーブルに1000件のデータを挿入するサンプルです。
処理の流れ
- グローバル一時テーブル(GTT)を作成
- PL/SQLブロックでデータを挿入(ループを使用して1000件挿入)
- 挿入したデータを確認
1. 一時テーブルの作成
まず、temp_sample_data という一時テーブルを作成します。
データは セッションが終了するまで保持 されるように設定します。
CREATE GLOBAL TEMPORARY TABLE temp_sample_data (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
created_at DATE
) ON COMMIT PRESERVE ROWS;
2. PL/SQLで1000件のデータを挿入
次に、PL/SQLブロックを使用して1000件のデータを一時テーブルに挿入します。
set serveroutput on;
DECLARE
v_counter NUMBER := 1;
BEGIN
FOR v_counter IN 1..1000 LOOP
INSERT INTO temp_sample_data (id, name, created_at)
VALUES (v_counter, 'Sample_' || v_counter, SYSDATE);
END LOOP;
commit;
-- コミット不要 (一時テーブルのため)
DBMS_OUTPUT.PUT_LINE('1000件のデータを挿入しました。');
END;
/
3. 挿入データの確認
SELECT COUNT(*) FROM temp_sample_data;
4. セッション終了後の動作
CREATE GLOBAL TEMPORARY TABLE temp_sample_data (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
created_at DATE
) ON COMMIT DELETE ROWS;
省略・・・・・

