H2数据库Oracle模式下SELECT报错90079别名被识别为Schema问题咨询
问题根因
- 核心问题是H2的Oracle兼容模式对Oracle专属的旧式
(+)外连接语法支持不完整。你SQL里的crm.crm_id = termin.crm_id (+)是Oracle独有的左外连接写法,不属于SQL标准语法,H2的MODE=ORACLE并没有完全兼容这种非标准语法。 - 解析错误触发的逻辑:H2的SQL解析器在遇到无法识别的
(+)语法时,解析逻辑出现错乱,无法正确识别termin是base_process的表别名,反而将termin误判定为Schema标识符,因此抛出Schema "TERMIN" not found的错误。
修复方案
- 优先推荐将旧式
(+)连接语法替换为标准的JOIN写法,完全兼容H2的解析逻辑,修改后的SQL示例如下:
select crm.id, crm.surname, crm.firstname, grp.departm, grp.team , termin.prev, termin.host, termin.final, termin.kenn from client_member as crm inner join company_group as grp on crm.id = grp.crm_id left join base_process as termin on crm.crm_id = termin.crm_id where crm.pers_id not like 'B%' and trunc(sysdate) between grp.date_from and nvl(grp.date_to, sysdate) and ... ;
- 如果必须保留原有
(+)语法,可以尝试升级H2到最新稳定版本,新版本对Oracle兼容模式的语法支持度有所提升,但仍可能存在其他兼容问题,不推荐作为首选方案。
内容的提问来源于stack exchange,提问作者JBStonehenge
相关产品推荐
相关产品推荐

