我正在使用Firebird 2.5,遇到了一个我自己无法解决的问题。
有一个语句使用UPDATE OR INSERT INTO
.我想让它使用特定的执行计划。但是 - 无论我把PLAN
放在哪里 - 我都会收到以下错误消息(行号因PLAN
的位置而异(:
令牌无效。
动态 SQL 错误。
SQL 错误代码 = -104。
令牌未知 - 第 2 行,第 5 列。
计划。
我在相应的文档中没有找到有关PLAN
与UPDATE OR INSERT INTO
一起使用的任何信息。
我的问题的各个方面:甚至可以将它们一起使用吗?这是否有效,或者是否计划在更高版本的Firebird中工作?是否有一个明显的原因它不起作用,我没有看到?有哪些替代方案可以规避这种情况?
在 Firebird 2.5 中不可能这样做(在 3.0 中也不可能(。查看解析器定义,PLAN
子句仅在以下方面受支持:
- 选择查询规范
- 搜索删除
- 搜索更新
对于merge
语句,应该可以为源指定计划(如果是选择查询(,但不能为合并本身指定计划。计划子句没有为update or insert
定义(例如,也没有为insert
定义(。
据我所知,没有任何计划将其添加到Firebird 4中。您应该考虑在跟踪器中添加改进票,但我不知道这是否可能。