一時テーブル¶
一時テーブル は、特殊なタイプのビューです。このビューは、それを作成したユーザーのセッションが終了するまで、またはユーザーによって削除されるまでしか存続しません。このビューとそこに挿入されたデータを表示できるのは、そのテーブルを作成したユーザーのみです。
これらのテーブルのデータは、外部データソースではなく、データがキャッシュされるデータベースに格納されます。他のタイプのビューとは異なり、そのスキーマとデータは Virtual DataPort から完全に管理されます。
一時テーブルを作成すると、サーバーはキャッシュデータベースにテーブル (一時テーブルではない実際のテーブル) を作成し、一時テーブルに挿入されるデータはこのテーブルに保持されます。
一時テーブルには行を挿入できますが、行を削除または更新することはできません。
注釈
一時テーブルを作成する前に、キャッシュエンジンを有効にします。そのためには、管理ガイドの「 キャッシュの構成 」のセクションで説明している手順に従います。
一時テーブルとマテリアライズドテーブルの違いは以下のとおりです。
一時テーブル |
マテリアライズドテーブル |
---|---|
一時テーブルは、そのテーブルを作成したセッションでのみ表示できます。 |
適切な権限を持っているすべてのユーザーが表示できます。 |
ユーザーがデータベースへのセッションを閉じると (Administration Tool の「VQL シェル」でテーブルを作成し、その後ユーザーが切断するか、別のデータベースに切り替えると) 自動的に削除されます。 |
セッションにまたがって存続します。 |
2 人のユーザーがそれぞれ同じ名前で一時テーブルを作成できます。各ユーザーはそれぞれのテーブルにのみアクセスできます。 |
同じ名前のマテリアライズドテーブルが 2 つ存在してはなりません。 |
Administration Tool で GUI を使用して作成または管理することはできません。「VQL シェル」からのみ作成できます。 |
Administration Tool で GUI を使用して作成することはできません (「VQL シェル」からのみ)、ただし、Administration Tool をリフレッシュ ([File] メニューの [Refresh] をクリック) すると、GUI を使用して管理できるようになります。 |
一時テーブルから派生ビューを作成することはできません。 |
マテリアライズドテーブルから派生ビューを作成することはできます。 |
Virtual DataPort は一時テーブルを作成してから 48 時間後に、データベースからそのテーブルを削除します。テーブルのデータが永続的に保持されないようにするためです。たとえば、ユーザーがセッションを閉じるときにエラーが発生し、そのユーザーがすでにテーブルを作成してあった場合などに、こうした処理が実行されます。
一時テーブルの作成¶
CREATE TEMPORARY TABLE
コマンドの構文を以下に示します。
CREATE TEMPORARY TABLE [<database:identifier>.]<name:identifier>
(
<VDP type field> [, <VDP type field> ]*
| <SQL type field> [, <SQL type field> ]*
)
[ FOLDER = <literal> ]
[ <primary key> ]
<VDP type field> ::=
<name:identifier> : <Virtual DataPort data type>
[ ( <property list> ) ]
<Virtual DataPort data type> ::= (see Figure 1)
<SQL type field> ::= <name:identifier> <SQL type>
[ ( <property> [, <property> ]+ ) ]
<SQL type> ::=
| BIT ( <integer> )
| BIT VARYING ( <integer> )
| BLOB
| BOOLEAN
| CHAR ( <integer> )
| CHARACTER ( <integer> )
| CHARACTER VARYING ( <integer> )
| DATE
| DECIMAL
| DECIMAL ( <integer>, <integer> )
| DOUBLE
| DOUBLE PRECISION
| FLOAT
| INT
| INTEGER
| LONG
| NCHAR ( <integer> )
| NUMERIC
| NUMERIC ( <integer> , <integer> )
| NVARCHAR ( <integer> )
| REAL
| SMALLINT
| TEXT
| TIMESTAMP
| TIMESTAMP WITH TIME ZONE
| VARCHAR ( <integer> )
CREATE TEMPORARY TABLE [<database:identifier>.]<name:identifier>
[ ( <field without type> [, <field without type> ]* ) ]
AS <select>
<field without type> ::= <name:identifier> [ ( <property list> ) ]
<property list> ::=
<property name:identifier> [ = <value:identifier> ]
[, <property name i:identifier> [ = <value i:identifier> ] ]*
<primary key> ::=
[ CONSTRAINT <name:literal> ]
PRIMARY KEY ( <field name:literal> [, <field name:literal> ]* )
<select> ::= (「 SELECT ステートメントの構文 」を参照)
フィールドの型を指定するために、ネイティブ VQL データ型または SQL データ型のいずれかを使用できます。SQL データ型は変換されます。
以下に例を示します。
CREATE TEMPORARY TABLE employee (
ssn : text
, first_name : text
, surname : text
)
CONSTRAINT 'primary_key_employee' PRIMARY KEY ('ssn');
この例では、「ssn」フィールドをプライマリキーとして一時テーブルが作成されます。Virtual DataPort では、ビューのプライマリキーは強制されません。このフィールドには重複する値を挿入しないようにする必要があります。
CREATE TEMPORARY TABLE employee_dept_10 AS SELECT * FROM employee
WHERE dept_no = 10;
一時テーブルの作成後は、通常のビューと同様にデータを挿入でき、同じステートメントで複数の行を挿入することもできます。
以下に例を示します。
INSERT INTO employee (first_name, surname, ssn)
VALUES ('Emma', 'Smith', '987-65-4321');
INSERT INTO employee (SELECT 'Robert', 'Brown', '123-45-6789' from
Dual());
INSERT INTO employee (first_name, surname, ssn) VALUES
('Emma', 'Smith', '987-65-4321')
, ('Elizabeth', 'Brown', '987-65-4322');
INSERT
句の詳細については、「 INSERT ステートメント 」を参照してください。
必要な権限¶
一時テーブルを作成するユーザーは、少なくとも以下のいずれかの権限を持っている必要があります。
データベースに対する
CREATE
権限。データベースに対する
CREATE_VIEW
権限。create_temporary_table
ロール。このロールを持つユーザーは、任意のデータベースから一時テーブルを作成できます。