在事务中有没有办法在Firebird中执行以下操作?
CREATE TABLE a (INTEGER c1);
INSERT INTO a (c1) VALUES (1);
DROP TABLE a
如果没有,为什么不呢?
有任何变通方法吗?尝试过保存点,ADO.NET事务,似乎没什么用。
更新的 Firebird事务不会很好地混合DDL和DML语句。您可以创建表,但它们在事务中不可见。需要两个单独的交易(或根本不需要交易)。此外,不要打扰匿名事务或执行块,因为它们似乎无法通过电线工作。
答案 0 :(得分:4)
Firebird不支持在创建它的同一事务中使用表。此外,我没有看到你在这里做什么(创建,填充和删除表)。也许您正在寻找Firebird的Global Temporary Table功能:您可以定义一次表(例如,使用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
,则需要添加明确的演员。