2

有没有办法在交易中在 Firebird 中执行以下操作?

 CREATE TABLE a (INTEGER c1);
 INSERT INTO a (c1) VALUES (1);
 DROP TABLE a

如果不是,为什么不呢?

任何解决方法?尝试了保存点、ADO.NET 事务,似乎没有任何效果。

UPDATE Firebird 事务不能很好地混合 DDL 和 DML 语句。您可以创建表,但它们在事务中不可见。需要两个单独的事务(或根本不需要事务)。此外,不要打扰匿名交易或执行区块,因为它们似乎无法通过网络工作。

4

1 回答 1

4

Firebird 不支持在创建它的同一事务中使用表。另外,我看不到您在这里所做的事情的意义(创建、填充和删除表格)。也许您正在寻找Firebird的全局临时表ON COMMIT DELETE ROWS功能:您定义表一次(例如使用),然后您可以重复使用它的定义,而不必每次都重新创建表。

当您评论说您想使用此表来存储“变量”时,您还可以查看RDB$SET_CONTEXT()RDB$GET_CONTEXT()(Firebird 2.0 及更高版本)的使用,它允许您将值存储在连接或事务上下文中。

例如,这会将变量设置VariableName为 ( VARCHAR) 值“513”

select rdb$set_context('USER_SESSION', 'VariableName', 513) from rdb$database

然后,您可以使用以下方法检索它:

select rdb$set_context('USER_SESSION', 'VariableName') from rdb$database

如果您需要它,INTEGER则需要添加显式演员表。

于 2013-06-10T11:05:08.293 回答