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の使い方については