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

时间:2012-12-09 17:07:30

标签: stored-procedures firebird

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

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

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

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

1 个答案:

答案 0 :(得分:13)

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

您可以随意使用Global Temporary Tables(需要Firebird 2.1或更高版本)

  

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

     

GTT有两种:

     

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

     

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

您必须事先创建GTT。

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]