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 前缀 ROWNUM
和 THIS_
认为它是一个专栏。我添加了以下自定义方言解析器,现在可以使用了:
public class RownumStandardDialectResolver extends StandardDialectResolver {
@Override
public Dialect resolveDialect(DialectResolutionInfo info) {
Dialect dialect = super.resolveDialect(info);
dialect.getKeywords().add("rownum");
return 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 前缀 ROWNUM
和 THIS_
认为它是一个专栏。我添加了以下自定义方言解析器,现在可以使用了:
public class RownumStandardDialectResolver extends StandardDialectResolver {
@Override
public Dialect resolveDialect(DialectResolutionInfo info) {
Dialect dialect = super.resolveDialect(info);
dialect.getKeywords().add("rownum");
return dialect;
}
}