【问题现象】
在编写 SQL 时使用如下 hint 语法:
SELECT /*+ leading(c) */ ...执行时报错:
YAS-04522 invalid hint leading

【影响范围】
所有当前 YashanDB 版本;
只要使用 leading hint,都会触发该错误。
【问题分析】
这是由于 YashanDB 优化器目前 尚未完全支持leading hint 语法,该 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 后,即可正常执行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70045450/viewspace-3084329/ ,如需转载,请注明出处,否则将追究法律责任。