Select 一行仅来自 HSQLDB 和 Oracle 方言

Select one row only from HSQLDB with Oracle dialect

如标题所示,我需要从查询中 select 一行(无论是什么)。 ROWNUM 在 HSQLDB 中不起作用,因为有 ROWNUM() 函数。更重要的是,在连接 url 设置和 schema-hsqldb.sql 中设置 ORA 方言都不起作用(它应该但它没有,我不知道为什么)。查询在 Oracle 中完全可用。

有什么建议吗?非常感谢!

如果您使用 ROWNUM() 而不是不带括号的简单 ROWNUM,则会发生错误。不确定它在 HSQLDB 中是如何管理的。

由于您使用的是 12c,因此可以使用 FETCH..FIRST..ONLY 代替 ROWNUM

select * from employees  FETCH FIRST 1 ROWS ONLY;

在较低版本中,您可以使用 row_number(),前提是您在 table.

select b.<columns>  FROM
(
  select t.*, row_number() OVER ( ORDER BY <unique_key_column_s) rn  from yourtable  t
) b WHERE  b.rn = 1;

经过大约三天的搜索、哭泣和自杀的想法,我发现在我的情况下(我有相当复杂的 SQL)Hibernate 前缀 ROWNUMTHIS_认为它是一个专栏。我添加了以下自定义方言解析器,现在可以使用了:

public class RownumStandardDialectResolver extends StandardDialectResolver {

    @Override
    public Dialect resolveDialect(DialectResolutionInfo info) {
        Dialect dialect = super.resolveDialect(info);
        dialect.getKeywords().add("rownum");

        return dialect;
    }

}