Stored procedures 有没有办法在Firebird存储过程中创建本地表变量?

Stored procedures 有没有办法在Firebird存储过程中创建本地表变量?,stored-procedures,firebird,Stored Procedures,Firebird,在MS SQL Server中,可以声明任何基元类型或表类型的局部变量。此表是一个普通表,您可以在其上运行SELECT、INSERT、UPDATE和DELETE,与任何其他表一样,只是它是一个局部变量,而不是数据库本身的一部分 我试图在Firebird中做同样的事情,但它似乎不喜欢语法 declare variable value int; --works fine declare variable values table (value int); --Error: "Token unknow

在MS SQL Server中,可以声明任何基元类型或表类型的局部变量。此表是一个普通表,您可以在其上运行
SELECT
INSERT
UPDATE
DELETE
,与任何其他表一样,只是它是一个局部变量,而不是数据库本身的一部分

我试图在Firebird中做同样的事情,但它似乎不喜欢语法

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

有没有办法做到这一点?(在任何人说“使用可选择的存储过程”之前,这是行不通的。我需要一些可以动态运行
INSERT
SELECT
的东西。)

Firebird不像SQL Server那样支持表变量

您可以使用的最接近的东西是(需要Firebird 2.1或更高版本)

(v.2.1)全局临时表(GTT)是存储在系统目录中的具有永久元数据但具有临时数据的表。来自不同连接(或事务,取决于范围)的数据彼此隔离,但GTT的元数据在所有连接和事务之间共享

GTT有两种类型:

具有在引用指定GTT的连接生命周期内持续存在的数据;及

数据仅在引用事务的生命周期内持续存在

您必须事先创建GTT

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]
创建全局临时表
...
[在提交行上]