事务中的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 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,则需要添加显式强制转换。