【发布时间】:2011-09-30 13:40:04
【问题描述】:
HSQLDB changelog 声明 ROWNUM() 已添加到 v2.2.0 中,我在针对内存中 HSQLDB 运行集成测试时使用它没有任何问题。
但是,我想对真正的 Oracle 10g 数据库运行相同的测试,但查询失败,因为伪列名为 ROWNUM。有没有一种简单的方法可以编写在两种环境中都可以使用的单个查询字符串?
【问题讨论】:
HSQLDB changelog 声明 ROWNUM() 已添加到 v2.2.0 中,我在针对内存中 HSQLDB 运行集成测试时使用它没有任何问题。
但是,我想对真正的 Oracle 10g 数据库运行相同的测试,但查询失败,因为伪列名为 ROWNUM。有没有一种简单的方法可以编写在两种环境中都可以使用的单个查询字符串?
【问题讨论】:
ROWNUM() 函数在 HSQLDB 2.2.x 及更高版本中默认可用。如果开启Oracle语法兼容模式,也可以使用ROWNUM。
此语句启用它:
SET DATABASE SQL SYNTAX ORA TRUE
或者使用连接属性sql.syntax_ora=true
【讨论】:
sql.syntax_ora=true 必须在连接 URL 中给出:例如<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:spring;sql.syntax_ora=true"/>,不在<property name="sql.syntax_ora" value="true"/>