我有一个脚本,我在其中创建一个临时表,我随后想要删除它。
我只是创建表,使用INSERT INTO语句填充它,但是当它删除它时,脚本会失败,说明该表正在使用中。
从阅读中看,它似乎是由交易管理引起的,但我有点困惑。
这是一个重现问题的小脚本:
CREATE TABLE SCRIPT_TEMP (
NAME VARCHAR(100) NOT NULL,
USERNAME VARCHAR(150) NOT NULL);
COMMIT WORK;
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT NAME, COALESCE(USERNAME, 'empty')
FROM SALESREPS;
COMMIT WORK;
DROP TABLE SCRIPT_TEMP;
COMMIT WORK;
或者,为了能够轻松测试没有SALESREPS表的任何人,请使用以下插入语句:o)
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT 'Name 1', 'Username 1'
FROM RDB$DATABASE;
COMMIT WORK;
在进行掉话时,我看不到仍然存在对SCRIPT_TEMP表的引用。为什么脚本自己的事务会在第二次COMMIT之后阻止它?
如果我将执行分成2个脚本,一切都很好。
我错过了什么?
谢谢!
PS:使用Firebird 2.5.2,如果重要
PPS:我的脚本比这更复杂。临时表中填充了需要操作的表名和相关约束,但这不是问题,该部分运行良好。事实上,我想要解决的问题很容易通过这里的代码示例重现,这是我在调试时得到的。 This SO question似乎是关于完全相同的问题,但唯一的答案对问题本身没有帮助