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

Mas*_*ler 6 firebird stored-procedures

在MS SQL Server中,您可以声明任何基本类型或表类型的局部变量.此表是可以运行一个普通的表SELECT,INSERT,UPDATEDELETE上,就像任何其他表,但它是一个局部变量,而不是数据库本身的一部分.

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

declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?(和任何人说,之前的"使用可选的存储过程,"这是行不通的.我需要的东西,我可以动态运行INSERTSELECT对.)

jac*_*ate 13

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

您可以随意使用的全球临时表(需要Firebird 2.1或更高版本)

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

GTT有两种:

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

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

你必须事先创建GTT.

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]
Run Code Online (Sandbox Code Playgroud)