无法删除在同一脚本中创建的表

时间:2015-11-19 20:56:05

标签: sql firebird firebird2.5

我有一个脚本,我在其中创建一个临时表,我随后想要删除它。

我只是创建表,使用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似乎是关于完全相同的问题,但唯一的答案对问题本身没有帮助

1 个答案:

答案 0 :(得分:1)

感谢Val Marinov让我指向了正确的方向。

看来我的问题是由于我的SQL管理器 - 必须有一个我不知道的设置。

脚本在FlameRobin中按预期运行。