Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle查询在oracle语法模式下的内存hsqldb中失败_Sql_Oracle_Compatibility_Hsqldb_Named Query - Fatal编程技术网

oracle查询在oracle语法模式下的内存hsqldb中失败

oracle查询在oracle语法模式下的内存hsqldb中失败,sql,oracle,compatibility,hsqldb,named-query,Sql,Oracle,Compatibility,Hsqldb,Named Query,以下查询在hsqldb 2.3.2中失败,sql.syntax\u ora=true。 在Oracle 11中运行良好。 它是一个名为查询的hibernate,在TestNG测试中用于内存hsqldb,而不是真正的Oracle。 错误消息是:java.sql.SQLSyntaxErrorException:意外标记:所需顺序:):行:16,指的是(ORDER by lastUpdateTime desc)区域上的行编号() select id as id1_9

以下查询在hsqldb 2.3.2中失败,sql.syntax\u ora=true。
在Oracle 11中运行良好。
它是一个名为查询的hibernate,在TestNG测试中用于内存hsqldb,而不是真正的Oracle。 错误消息是:java.sql.SQLSyntaxErrorException:意外标记:所需顺序:):行:16,指的是(ORDER by lastUpdateTime desc)区域上的行编号()

select  
        id         as id1_9_0_,  
        version    as version2_9_0_,  
        lastUpdateTime as lastUpda7_9_0_,  
        eventType    as eventTyp3_9_0_,  
        clientJid    as clientJi4_9_0_,  
        topicName as topicNam5_9_0_,  
        attributes as attribut6_9_0_  
    from (select logEvents.id as id,  
                 logEvents.version as version,  
                 logEvents.lastUpdateTime as lastUpdateTime,  
                 logEvents.eventType as eventType,  
                 logEvents.clientJid as clientJid,  
                 logEvents.topicName as topicName,  
                 logEvents.attributes as attributes,  
                 row_number() over (order by lastUpdateTime desc) rn    from xyz_logEvent logEvents)  
    where rn between 1 and 4 order by rn;  

HSQLDB并不支持所有可能的SQL语法<不支持代码>行号()over(order by…,而不支持
行号()over()

另一种选择可能如下所示:

(select logEvents.id as id,
logEvents.version as version,
logEvents.lastUpdateTime as lastUpdateTime,
logEvents.eventType as eventType,
logEvents.clientJid as clientJid,
logEvents.topicName as topicName,
logEvents.attributes as attributes,
row_number() over () rn from xyz_logEvent logEvents order by lastUpdateTime limit 4)

谢谢这很有帮助。虽然limit和offset不能用作HIbernate查询(使用上述sql查询)上的setParameter,但setFirstResult()和setMaxResults()API有帮助。唯一不幸的缺点是,现在单元测试的一些查询与开发代码不同。hsqldb仍然比h2更兼容Oracle。请向hsqldb项目报告任何其他不兼容,以便在未来版本中解决。