English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Oracle8iまたはそれ以降のバージョンでは、以下の二種類の一時テーブルを作成できます:
1。セッション固有の一時テーブル
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT PRESERVE ROWS;
2。トランザクション固有の一時テーブル
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
作成された一時テーブルは存在するものの、insert文を実行して別の接続でselectを実行してみると、レコードが空になります。わかりましたか、以下の二つの文をもう一度貼り付けます:
--ON COMMIT DELETE ROWSは、一時テーブルがトランザクション指定であることを示し、それぞれのコミット後、ORACLEがテーブルを切断(全行を削除)します。
--ON COMMIT PRESERVE ROWSは、一時テーブルがセッション指定であることを示し、セッションが中断された場合、ORACLEがテーブルを切断(削除)します。
衝突の問題は全く考慮する必要はありません。
一時テーブルは現在のセッション(session)で使用されるデータのみを保存し、データはトランザクションまたはセッション期間のみ存在します。
CREATE GLOBAL TEMPORARY TABLEコマンドを使用して一時テーブルを作成すると、トランザクションタイプの一時テーブルの場合、データはトランザクション期間のみ存在し、セッションタイプの一時テーブルの場合、データはセッション期間のみ存在します。
セッションのデータは現在のセッション専用です。各セッションは自分のデータのみを確認および修正できます。DMLロックは一時テーブルのデータにかけられません。以下の文は行の存在性を制御します。
● ON COMMIT DELETE ROWS 表名行只是在事务期间可见
● ON COMMIT PRESERVE ROWS は、行がセッション全体の間可见になることを意味します。
一時テーブルに対してインデックス、ビュー、トリガーを作成することができます。exportおよびimportツールを使用してテーブルの定義をインポートおよびエクスポートすることもできますが、データのエクスポートはできません。テーブルの定義はすべてのセッションに可见です。
Temporary Tables 一時テーブル
1概要
ORACLE データベースは永続テーブルだけでなく、一時テーブル(一時テーブル)を保存することもできます。これらの一時テーブルは、セッション(SESSION)のデータを保存するために使用されます。
または、セッションが終了したり、ユーザーがコミットまたはロールバックを実行した場合に必要なデータを含むトランザクションに保存されます。セッションが終了したり、ユーザーがコミットまたはロールバックを実行した場合、一時テーブルのデータは自動的にクリアされます。
ただし、一時テーブルの構造およびメタデータはユーザーのデータディクショナリに保存されています。
一時テーブルは Oracle8iおよびその以上の製品でサポートされています。
2詳細な説明
Oracleの一時テーブルは、セッションレベルの一時テーブルとトランザクションレベルの一時テーブルに分類されます。
セッションレベルの一時テーブルとは、一時テーブル内のデータがセッションのライフサイクル中にのみ存在することを指します。ユーザーがセッションを退出した場合、Oracleは自動的に一時テーブル内のデータをクリアします。
トランザクションレベルの一時テーブルとは、一時テーブル内のデータがトランザクションのライフサイクル中にのみ存在することを指します。トランザクションが終了(コミットまたはロールバック)した場合、Oracleは自動的に一時テーブル内のデータをクリアします。
一時テーブル内のデータは現在のセッションに対してのみ有効であり、各セッションには独自の一時データがあり、他のセッションの一時テーブル内のデータにアクセスすることはできません。したがって、
一時テーブルは DML ロックが必要ありません。セッションが終了した場合(ユーザーが通常で退出した場合、ユーザーが正常でない退出または ORACLE インスタンスのクラッシュ)またはトランザクションが終了した場合、Oracleはそのセッションの
テーブルに対して TRUNCATE ステートメントを実行することで一時テーブルのデータをクリアできます。ただし、他のセッションの一時テーブル内のデータはクリアされません。
一時テーブルにインデックスを作成し、一時テーブルに基づいてビューを作成することもできます。同様に、一時テーブル上に作成されたインデックスも一時的で、現在のセッションまたはトランザクションに対してのみ有効です。
一時テーブルにはトリガーを持つことができます。
3一時テーブルの作成
一時テーブルの定義はすべてのセッションSESSIONに可见ですが、テーブル内のデータは現在のセッションまたはトランザクションに対してのみ有効です。
作成方法:
1)ON COMMIT DELETE ROWS は、トランザクションレベルの一時テーブルの作成方法を定義します。
CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT DELETE ROWS; SQL> create table permernate( a number); SQL> insert into admin_work_area values(sysdate,sysdate, ‘temperary table ‘); SQL> insert into permernate values(1); SQL> commit; SQL> select * from admin_work_area; SQL> select * from permernate; A 1
2)ON COMMIT PRESERVE ROWS は、セッションレベルの一時テーブルを作成する方法を定義しています。
CREATE GLOBAL TEMPORARY TABLE admin_work_area (startdate DATE, enddate DATE, class CHAR(20)) ON COMMIT PRESERVE ROWS; EXAMPLE:
会話1:
SQL> drop table admin_work_area; SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 2 (startdate DATE, 3 enddate DATE, 4 class CHAR(20)) 5 ON COMMIT PRESERVE ROWS; SQL> insert into permernate values(2); SQL> insert into admin_work_area values(sysdate,sysdate, ‘session temperary ‘); SQL> commit; SQL> select * from permernate; A ---------- 1 2 SQL> select * from admin_work_area; STARTDATE ENDDATE CLASS ---------- ---------- -------------------- 17-1;63;63; -03 17-1;63;63; -03 session temperary
会話2:
SQL> select * from permernate; A ---------- 1 2 SQL> select * from admin_work_area;
行を選択していません。
会話2会話が見えません。1中の一時テーブルのデータ。
4 ORACLE一時テーブルとSQLSERVER一時テーブルの違い
SQL SERVER一時テーブル
一時テーブルも作成できます。一時テーブルは永続テーブルと似ていますが、一時テーブルは tempdb に保存され、使用されなくなったときに自動的に削除されます。
ローカルとグローバルの二種類の一時テーブルがありますが、これらは名前、可见性、可用性の点で異なります。ローカル一時テーブルの名前は単一の数字記号 (#) で始まります;
は、現在のユーザーコネクションに対してのみ可见です;ユーザーが Microsoft63; SQL Server63; 2000 インスタンスが接続を切れたときに削除されます。グローバル一時テーブルの名前は数学記号で始まります。
(##) で始まるものは、作成後はすべてのユーザーに対して可见になり、すべての参照しているユーザーが SQL Server から接続を切れたときに削除されます。
例えば、employees という名前のテーブルを作成すると、そのテーブルに対するセキュリティ権限を持つ誰でもそのテーブルを使用できますが、それが削除されていない限りです。
もし、#employees という名前のローカル一時テーブルを作成すると、そのテーブルに対する操作はあなただけが行えるし、接続が切れたときにそのテーブルが削除されます。もし、##employees という名前のグローバル一時テーブルを作成すると、
データテーブルのすべてのユーザーがそのテーブルに対して操作を実行できます。そのテーブルが作成された後に他のユーザーが使用されていない場合、接続を切断するとそのテーブルが削除されます。そのテーブルが作成されてから他のユーザーが使用されていない場合、
他のユーザーが使用している場合、SQL Serverはすべてのユーザーが接続を切断した後にテーブルを削除します。
異なる点:
1. SQL SERVERの一時テーブルは「メモリテーブル」として、テーブルがメモリに保存されていることを意味します。ORACLEの一時テーブルは、DROP TABLEを実行しない限り、テーブル定義がデータディクショナリに保持されます。
2. SQL SERVERの一時テーブルにはORACLEの一時テーブルのトランザクションレベルの機能がありません。
3 SQL SERVERのローカル一時テーブル(#)は、ORACLEのセッションレベルの一時テーブルに似ていますが、セッションが終了するときにORACLEはテーブルを削除しません。
4 SQL SERVERの全体的な一時テーブル(##)は、複数の接続が同一のメモリ領域を共有することを意味します。そのメモリ領域にポインタが参照していない場合、SQL SERVERは自動的に全体的な一時テーブルを解放します。
5 ORACLEはメモリ内のデータベースではないため、ORACLEがSQL SERVERと同様に一時テーブルの作成と削除を頻繁に行うと、パフォーマンスに影響を与える可能性があります。
したがって、ORACLEはユーザーがDROP TABLEを実行するまで一時テーブルの定義を保持します。
6 ORACLEでは、複数のユーザーが同一のテーブルを共有する必要がある場合(SQL SERVERの全体的な一時テーブル##に似たもの)、永続テーブルを使用することができます。
表にユーザーをユニークに識別できる列を追加し、トリガーやビューを使用して、ユーザーがログアウトした場合、そのログインユーザーのユニーク情報に基づいて対応するテーブルのデータを削除します。
この方法はORACLEに一定の負荷をもたらします。
これでoracle 临时表の情報を整理しました。今後も関連する情報を追加していく予定です。皆様のこのサイトへのサポートに感謝します!