【问题现象】
在编写 SQL 时使用如下 hint 语法:
SELECT /*+ leading(c) */ ...
执行时报错:
YAS-04522 invalid hint leading
【影响范围】
所有当前 YashanDB 版本;
只要使用 leading hint,都会触发该错误。
【问题分析】
这是由于 YashanDB 优化器目前尚未完全支持leadinghint 语法,该 hint 会被识别为非法提示。
【验证示例】
可使用以下语句验证是否存在此问题:
DROP TABLE a;
DROP TABLE b;
DROP TABLE c;
CREATE TABLE a(tid NUMBER, tname VARCHAR2(30));
CREATE TABLE b(tid NUMBER, tname VARCHAR2(30));
CREATE TABLE c(tid NUMBER, tname VARCHAR2(30));
SELECT /*+ leading(c) */ DISTINCT a.tid
FROM a
LEFT JOIN b ON a.tid = b.tid
LEFT JOIN c ON b.tid = c.tid
WHERE a.tname IS NOT NULL;
执行后会出现 YAS-04522 报错。
【解决方法】
目前版本暂不支持 leading() hint,请:
直接删除该 hint
或 通过改写 SQL 顺序 影响执行计划
【后续建议】
若确需指定 join 顺序,建议通过字段选择性或 join 结构影响优化器;
关注后续版本发布,预计未来将补全对 hint 的支持矩阵。
【总结】
YAS-04522 是因 leading hint 触发的语法识别异常;
并非 SQL 本身有误,而是当前优化器不支持该指令;
去除该 hint 后,即可正常执行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。