无法删除在同一脚本中创建的 table
Cannot drop table created within same script
我有一个脚本,我在其中创建了一个临时 table,随后我想删除它。
我简单地创建了 table,使用 INSERT INTO 语句填充它,但是当要删除它时,脚本失败说明 table 正在使用中。
看了一下好像是事务管理引起的,但是有点疑惑。
这是一个重现问题的小脚本:
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 table 的任何人都能轻松测试 table,请使用此插入语句 :o)
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT 'Name 1', 'Username 1'
FROM RDB$DATABASE;
COMMIT WORK;
我没看到什么仍然持有对 SCRIPT_TEMP table 的引用,直到进行 drop 调用。为什么即使在第二次 COMMIT 之后,脚本自己的事务也会阻止它?
如果我将执行分成 2 个脚本,一切都很好。
我错过了什么??
谢谢!!
PS:使用 Firebird 2.5.2,以防万一
PPS:我的脚本比这复杂一点。 temp table 充满了 table 名称和需要操作的相关约束,但这不是问题,该部分运行良好。事实上,我想解决的问题很容易通过此处的代码示例重现,这是我在调试时遇到的。 This SO question 似乎是关于完全相同的问题,但唯一的答案对问题本身没有帮助
感谢 Val Marinov 为我指明了正确的方向。
看来我的问题是由于我的 SQL 经理 - 一定有一个我不知道的设置。
脚本在 FlameRobin 中按预期运行。
我有一个脚本,我在其中创建了一个临时 table,随后我想删除它。
我简单地创建了 table,使用 INSERT INTO 语句填充它,但是当要删除它时,脚本失败说明 table 正在使用中。
看了一下好像是事务管理引起的,但是有点疑惑。
这是一个重现问题的小脚本:
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 table 的任何人都能轻松测试 table,请使用此插入语句 :o)
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT 'Name 1', 'Username 1'
FROM RDB$DATABASE;
COMMIT WORK;
我没看到什么仍然持有对 SCRIPT_TEMP table 的引用,直到进行 drop 调用。为什么即使在第二次 COMMIT 之后,脚本自己的事务也会阻止它?
如果我将执行分成 2 个脚本,一切都很好。
我错过了什么??
谢谢!!
PS:使用 Firebird 2.5.2,以防万一
PPS:我的脚本比这复杂一点。 temp table 充满了 table 名称和需要操作的相关约束,但这不是问题,该部分运行良好。事实上,我想解决的问题很容易通过此处的代码示例重现,这是我在调试时遇到的。 This SO question 似乎是关于完全相同的问题,但唯一的答案对问题本身没有帮助
感谢 Val Marinov 为我指明了正确的方向。
看来我的问题是由于我的 SQL 经理 - 一定有一个我不知道的设置。
脚本在 FlameRobin 中按预期运行。