事务中的Firebird DDL + DML语句
本文关键字:DML 语句 DDL Firebird 事务 | 更新日期: 2023-09-27 18:17:54
在一个事务中是否有办法在Firebird中执行以下操作?
CREATE TABLE a (INTEGER c1);
INSERT INTO a (c1) VALUES (1);
DROP TABLE a
如果没有,为什么没有?
工作区吗?尝试保存点,ADO。. NET事务,似乎没有任何工作。
更新Firebird事务不能很好地混合DDL和DML语句。您可以创建表,但它们在事务中不可见。需要两个单独的事务(或者根本不需要事务)。此外,不要为匿名事务或执行块而烦恼,因为它们似乎无法在线上工作。
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
,则需要添加显式强制转换。