グローバル一時テーブルは、トランザクションまたはセッションの期間にのみ必要な暫定データを格納する場合に役立ちます。通常のテーブルとは異なり、グローバル一時テーブルは、セッションまたはトランザクションが終了すると自動的に削除されます。したがって、通常のテーブルのように明示的に削除する必要はありません。ただし、グローバル一時テーブルは現在のセッションにのみ表示されるため、他のセッションやユーザーはアクセスできません。
Oracle では、グローバル一時テーブルは、「グローバル一時テーブルの作成」ステートメントを使用して作成される特殊なタイプのテーブルです。このステートメントは、通常の「create table」ステートメントに似ていますが、テーブルがグローバル一時テーブルであることを指定するキーワード「global temporary」が含まれています。
「CREATE GLOBAL TEMPORARY TABLE」ステートメントの構文は次のとおりです。
CREATE GLOBAL TEMPORARY TABLE table_name (
column1 データ型 [NULL | NULL ではない]、
column2 データ型 [NULL | NULL ではない]、
...
) [ON COMMIT {削除 | PRESERVE} ROWS];
この構文で、table_name は、作成するグローバル一時テーブルの名前です。 column1、column2 などは、テーブル内の列の名前とデータ型です。
ON COMMIT 句は、現在のトランザクションがコミットされたときにテーブル内の行を削除するか保持するかを指定します。 ON COMMIT 句が定義されていない場合、データベース エンジンは ON COMMIT DELETE ROWS オプションを使用します。
前述のように、一時テーブルのデータは非公開であることに注意してください。これは、テーブルを作成したセッション以外のセッションがテーブルにアクセスできないことを意味します。
グローバル一時テーブルの作成例
Oracle データベースで create temporary table ステートメントを使用する実用的な例をいくつか見てみましょう。
以下に示すクエリの例を考えてみましょう。
グローバル一時テーブルの作成 temp_sales (product_id NUMBER(10) NOT NULL,
sale_date DATE NOT NULL,
sale_amount NUMBER(10,2) NOT NULL
) コミット時に行を削除します。
上記の例では、ON COMMIT DELETE ROWS オプションを使用して一時テーブルを作成します。
次に、いくつかのサンプル データを次のように挿入できます。
INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (1, DATE '2022-10-01', 100);INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (2, DATE '2022-10-02', 500);
INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (3, DATE '2022-10-03', 130);
その後、次のようにトランザクションをコミットできます。
専念;コミット後、データベース エンジンは、commit 句で指定されているように、一時テーブル内のすべてのデータを切り捨てます。
例 2
次の例は、コミット時に行を保持するテーブルを作成する方法を示しています。
グローバル一時テーブルの作成 temp_sales (product_id NUMBER(10) NOT NULL,
sale_date DATE NOT NULL,
sale_amount NUMBER(10,2) NOT NULL
) ON COMMIT PRESERVE ROWS ;
次に、サンプル行を追加して、次のようにコミットします。
INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (1, DATE '2022-10-01', 100);INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (2, DATE '2022-10-02', 500);
INSERT INTO TEMP_SALES (product_id, sale_date, sale_amount) VALUES (3, DATE '2022-10-03', 130);
専念;
この場合、以下の select ステートメントに示すように、コミット操作後にデータを保持する必要があります。
SELECT * FROM TEMP_SALES;出力:
結論
「一時テーブルの作成」ステートメントは、Oracle で一時テーブルを作成するための強力なツールです。一時テーブルは、トランザクションまたはセッションにのみ必要な一時データを格納するのに役立ちます。 「一時テーブルの作成」ステートメントを使用すると、一時テーブルの構造と列を定義し、トランザクションがコミットされたときの行の処理方法を指定できます。その結果、一時テーブルを使用すると、クエリとアプリケーションのパフォーマンスと効率が向上し、データベースに必要な永続ストレージ領域の量を減らすことができます。