6

MS SQL Server では、任意のプリミティブ型またはテーブル型のローカル変数を宣言できます。このテーブルは、データベース自体の一部ではなく、ローカル変数であることを除いて、他のテーブルと同じように、、、および上でSELECT実行INSERTできるUPDATE通常のテーブルです。DELETE

Firebird で同じことをしようとしていますが、構文が気に入らないようです。

declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"

これを行う方法はありますか?(そして、誰かが「選択可能なストアド プロシージャを使用する」と言う前に、それは機能しません。動的に実行できるものが必要ですINSERTSELECT)

4

1 に答える 1

14

Firebirdは、SQLServerと同じようにテーブル変数をサポートしていません。

自由に使える最も近いものは、グローバル一時テーブルです(Firebird 2.1以降が必要です)

(v.2.1)グローバル一時テーブル(GTT)は、永続的なメタデータを使用してシステムカタログに保存されるテーブルですが、一時データを使用します。異なる接続(またはスコープによってはトランザクション)からのデータは互いに分離されますが、GTTのメタデータはすべての接続とトランザクション間で共有されます。

GTTには次の2種類があります。

指定されたGTTが参照された接続の存続期間中持続するデータを使用します。と

参照トランザクションの存続期間中のみ存続するデータを使用します。

事前にGTTを作成する必要があります。

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]
于 2012-12-09T19:12:59.540 に答える