Usage
CData Virtuality Server はテンポラリテーブルの作成をサポートしています。Temp テーブルは動的に作成されますが、他の物理テーブルと同様に扱われます。
Temp Tables はINSERT
文で暗黙的に参照するか、CREATE TABLE
文で明示的に定義することができます。暗黙的に作成されるTemp Tables は、#
で始まる名前でなければなりません。
Explicit Definition
CREATE
LOCAL
TEMPORARY
TABLE
x (
column
type [
NOT
NULL
], ... [
PRIMARY
KEY
(
column
, ...)])
Implicit Definition
Using VALUES
INSERT
INTO
#x (
column
, ...)
VALUES
(value, ...)
#x
が存在しない場合、値式から与えられたカラム名と型を使用して定義されます。
Using SELECT
INSERT
INTO
#x [(
column
, ...)]
SELECT
c1, c2
FROM
t
もし#x が存在しなければ、対象となる列名(もし提供されなければ、列名はQuery から派生した列名と一致します)とQuery から派生した列の型を使用して定義されます。
SERIAL
データ型を使用して、NOT NULL
と自動インクリメントのINTEGER
列を指定します。SERIAL
列の開始値は 1 です;Temp Table をDrop するには、
DROP TABLE
を使用します:
DROP
TABLE
x
Primary Key Support
- すべてのキー列は比較可能でなければなりません;
- 主キーを使用することで、比較、IN、LIKE、および ORDER BY の検索をサポートするクラスタ化インデックスが作成されます;
- NULL は主キーの値として許容されますが、すべてNULL のキーを持つ行は1行だけでなければなりません。
Limitations
CREATE TABLE
構文では、基本的なテーブル定義(カラム名と型情報)とオプションの主キーのみがサポートされます;- CREATE TABLE 文では
ON COMMIT
句はサポートされていません; DROP
ステートメントでは、Drop behaviour
オプションはサポートされていません;- ローカル・テンポラリ・テーブルのみがサポートされています。これは、Temp Tables のスコープは、セッションかそれを作成する仮想プロシージャのブロックのどちらかになることを意味します;
- セッションレベルの Temp Tables はフェイルオーバーセーフではありません;
- Temp Tables は
READ_UNCOMMITED
トランザクション分離レベルをサポートしています。より高い分離レベルをサポートするためのロック機構は利用できず、ロールバックの結果は複数のトランザクション間で矛盾する可能性があります。同時実行中のトランザクションが同じローカル・テンポラリ・テーブルやセッションと関連付けられていない場合、トランザクションの分離レベルは実質的にSERIALIZABLE
となります。ローカルの一時テーブルで完全な一貫性を保ちたい場合は、一度に1つのトランザクションの接続のみを使用してください。この動作モードは、トランザクションごとに接続を追跡するコネクションプーリングによって保証されています; Lob 値(
XML
,clob
,blob
)は、一時テーブル内の値ではなく、参照によって追跡されます。一時テーブルに挿入された外部ソースからのLob 値は、関連するステートメントまたは接続が閉じられると読めなくなることがあります。次の例は、2 つのソースからのデータと手動で挿入されたレコードで一時テーブルをロードし、その後のクエリでその一時テーブルを使用する一連のステートメントです:...
CREATE
LOCAL
TEMPORARY
TABLE
TEMP
(a
integer
, b
integer
, c
integer
);
SELECT
*
INTO
temp
FROM
Src1;
SELECT
*
INTO
temp
FROM
Src2;
INSERT
INTO
temp
VALUES
(1,2,3);
SELECT
a,b,c
FROM
Src3,
temp
WHERE
Src3.a =
temp
.b;
...
See Also
Virtual Procedures TempTablesの使い方については