-Oracleでは、一時テーブルの作成が許可されています 。
-一時テーブルの定義はすべてのセッションに表示されますが、一時テーブルのデータは、データをテーブルに挿入するセッションにのみ表示されます。
-一時テーブルを作成するには、CREATE GLOBALTEMPORARYTABLEステートメントを使用する必要があります。
-ON COMMIT句は、テーブル内のデータがトランザクション固有(デフォルト)であるかセッション固有であるかを示します
行を削除
これにより、トランザクション固有の一時テーブルが作成されます。セッションは、トランザクションが最初にテーブルに挿入されると、一時テーブルにバインドされます。バインディングは、トランザクションの終了時になくなります。データベースは、コミットするたびにテーブルを切り捨てます(すべての行を削除します)。
行を保存する
これにより、セッション固有の一時テーブルが作成されます。セッションは、セッション内のテーブルへの最初の挿入で一時テーブルにバインドされます。このバインディングは、セッションの終了時、またはセッションでテーブルのTRUNCATEを発行することで解消されます。セッションを終了すると、データベースはテーブルを切り捨てます。
一時テーブルは、結果セットがバッファリングされるアプリケーションで役立ちます。おそらく、複数のDML操作を実行して構築されているためです。
CREATE GLOBAL TEMPORARY TABLE GL_DATA_TEMP(startdate DATE、
enddate DATE、
gl_id CHAR(20))
ON COMMIT DELETE ROWS;
インデックスは一時テーブルに作成できます 。これらも一時的なものであり、インデックス内のデータは、基になるテーブル内のデータと同じセッションまたはトランザクションスコープを持ちます。
TRUNCATEステートメントが一時テーブルに対して発行された場合、セッション固有のデータのみが切り捨てられます。他のセッションのデータへの影響はありません。
トランザクションをロールバックすると、テーブル定義は保持されますが、入力したデータは失われます。
一時テーブルのデータは、REDOを生成しない一時テーブルスペースの一時セグメントに格納されるため、グローバル一時テーブルを使用した操作は比較的高速です。ただし、UNDOは、REDOログが設定されているUNDOテーブルスペースで引き続き生成されます。したがって、やり直し操作はグローバル一時テーブルで完全に排除されるわけではありませんが、比較的低くなります
一時テーブルのデータは、異常終了した場合でも、データベースセッションの終了時に自動的に削除されます。
ビューは、一時テーブルおよび一時テーブルと永続テーブルの組み合わせに対して作成できます。トリガーを関連付けることができます
12.1(12cデータベース)Oracleリリースでは、一時的な取り消しの概念が導入されました。これにより、グローバル一時テーブルの取り消しセグメントを一時表領域に格納できます。これにより、グローバル一時テーブルをフィジカル・スタンバイ・データベースおよび読み取り専用データベースで使用できるようになり、REDOを作成する必要がなくなります。
ALTER SYSTEM SET TEMP_UNDO_ENABLED =TRUE;
ALTER SYSTEM SET TEMP_UNDO_ENABLED =FALSE;