在 oracle 模式下升级 h2 数据库 jar 后选择语句失败

Posted

技术标签:

【中文标题】在 oracle 模式下升级 h2 数据库 jar 后选择语句失败【英文标题】:Select statement failing after h2 database jar upgrade in oracle mode 【发布时间】:2015-09-16 14:38:28 【问题描述】:

将 H2 数据库版本从 1.3.171 升级到 1.4.187 后,我的 select 语句失败并出现 jdbc 错误代码 [90022-187]。我正在使用 Spring 4 和 Hibernate 4.3.5。

错误跟踪:

未找到函数“BUS_ENTY_GUID”; SQL 语句: SELECT * FROM(选择consumerin0_.CNSMR_INTNT_SID如CNSMR_IN1_0_0_,busentity1_.BUS_ENTY_SID如BUS_ENTY1_4_1_,intentuser2_.USR_SID如USR_SID1_10_2_其中consumerin0_.OWNR_ENTY_NM = busentity1_.BUS_ENTY_GUID(+)和consumerin0_.USR_EXTRNL_ID = intentuser2_.MAG_GUID(+)和较低的(consumerin0_.ORD_ID )=lower(?) 和 lower(intentuser2_.USR_LAST_NM)=lower(?) ) where rownum

请帮助解决问题

【问题讨论】:

【参考方案1】:

H2 不再支持“旧式”Oracle 外连接语法。您将不得不使用“外部联接”。

【讨论】:

【参考方案2】:

感谢托马斯的帮助!

我使用的是 org.hibernate.dialect.OracleDialect,因此查询的转换具有旧式连接。现在我已将其更改为 Oracle10gDialect,它工作正常。

【讨论】:

【参考方案3】:

使用-Dh2.oldStyleOuterJoin=true 支持旧语法。

访问http://www.h2database.com/javadoc/org/h2/engine/SysProperties.html

【讨论】:

以上是关于在 oracle 模式下升级 h2 数据库 jar 后选择语句失败的主要内容,如果未能解决你的问题,请参考以下文章

H2 和 Oracle 兼容性问题

Oracle查询中的H2加/减间隔秒

如何将H2数据库嵌入到交付给客户端的jar文件中?

springboot中使用h2数据库(内存模式)

配置嵌入式 H2 用户以进行分发

为啥 Grails 使用 H2 而不是 Oracle?