我有 Firebird 4.0,从 HeidiSQL 查询。经过两次嵌套连接后,HeidiSQL 返回:
SQL Error (335544794): [FireDAC][Phys][FB]operation was cancelled Statement level timeout expired.
我相信查询只会运行一秒多一点。经过一番谷歌搜索后,我发现可以使用SET STATMENT TIMEOUT 1000 SECOND;
更改“语句超时”。由于某种原因,该消息仍然出现,就好像 Firebird 忽略了我的声明一样。
HeidiSQL 中的完整查询:
SET STATEMENT TIMEOUT 1000 SECOND;
SELECT FIRST 100 * FROM STAGE_TABLE
LEFT OUTER JOIN DIM_TABLE ON STAGE_TABLE.ID = DIM_TABLE.ID
LEFT OUTER JOIN FACT_TABLE ON STAGE_TABLE.ID = FACT_TABLE.ID;
选择仅加上第一个连接大约需要半秒,添加第二个连接会遇到过期语句。看起来 HeidiSQL 或 Firebird 只是忽略了我的第一个 SQL 命令。我该如何解决这个问题?
最佳答案
我已经能够重现这个。问题在于 HeidiSQL 的(默认)查询超时设置为 30
(无单位),并且似乎在执行语句时传递了该设置,而没有考虑 Firebird 期望的毫秒数。
换句话说,Firebird 收到执行语句的指令,超时时间为 30 毫秒,这个时间相当短。这会导致“操作被取消,语句级超时已过期。”错误。
这是因为执行时传递的非零超时优先于您使用 SET STATEMENT TIMEOUT 设置的 session 级语句超时(尽管如果它高于非零数据库级)语句超时,它将使用数据库级别的语句超时)。
要解决此问题,请在 HeidiSQL 的 session 管理器中,选择您的 Firebird 服务器,转到“高级”选项卡,然后在“查询超时”中输入 0
(表示无语句级超时),或输入所需的超时值(考虑到它以毫秒为单位)。
关于sql - 如何使用 HeidiSQL 在 Firebird 中设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77322810/