sql - 如何使用 HeidiSQL 在 Firebird 中设置超时?

标签 sql firebird heidisql firebird-4.0

我有 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(表示无语句级超时),或输入所需的超时值(考虑到它以毫秒为单位)。

Screenshot of the Advanced tab of a Firebird database in the HeidiSQL Session Manager, the Query timeout setting is set to zero and hihglighted

关于sql - 如何使用 HeidiSQL 在 Firebird 中设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77322810/

相关文章:

MySQL 按用户分隔值

mysql - 使用带有 MySQL 链接服务器的 openquery 时,宽 varchar 字段导致 "Requested conversion is not supported"错误

mysql - SQL Server中基于ID的一列到多列

php - 在 MySQL 中根据时间选择谁轮类的问题

sql - 从查询中选择 FIRST X,但获取计数(例如用于分页)

triggers - 如何使用更新触发器获取主表中明细表字段的总和

MySQL: bool 值上的 "= true"与 "is true"。什么时候最好使用哪一个?哪一个是独立于供应商的?

windows - 为 Qt 5.5.1 (msvc2010) 编译 ibase 驱动

HeidiSQL - 如何在查询窗口中显式选择单个列?

mysql - 查询期间失去与 MySQL 服务器的连接 - 表大小是否有问题?