Oracle 中的 ROWNUM 有替代品吗?

Posted

技术标签:

【中文标题】Oracle 中的 ROWNUM 有替代品吗?【英文标题】:Is there any replacement for ROWNUM in Oracle? 【发布时间】:2018-11-02 21:35:58 【问题描述】:

我有对 Oracle 数据库的 JPA 本机查询。我知道限制结果的唯一方法是在 Oracle 中使用“rownum”,但由于某种原因,我必须使用的 jar 驱动程序的查询解析器无法识别它。

Caused by: java.sql.SQLException: An exception occurred when executing the following query: "/* dynamic native SQL query */ SELECT * from SFDC_ACCOUNT A  where  SBSC_TYP  = ?   and  rownum <= ?".  Cause: Invalid column name 'rownum'.  On line 1, column 90.  [parser-2900650]
com.compositesw.cdms.services.parser.ParserException: Invalid column name 'rownum'.  On line 1, column 90.  [parser-2900650]

我怎样才能摆脱它?

【问题讨论】:

该错误名称为小写可疑。如果你使用大写的ROWNUM,会有什么不同吗? (我知道这对 Oracle 无关紧要,但该错误并非来自 Oracle 解析器。)您也可以在子查询中尝试 row_number() Oracle 的版本? 12c 及更高版本支持仅获取前 X 行语法 How to resolve Oracle's 'rownum' pseudocolumn with JPA Criteria API?的可能重复 请发minimal reproducible example 并发布完整的异常堆栈跟踪 【参考方案1】:

ANSI 标准如下所示

SELECT *
FROM (
SELECT
T.*,
ROW_NUMBER() OVER (PARTITION BY T.COLUMN ORDER BY T.COLUMN) ROWNUM_REPLACE
FROM TABLE T
)
WHERE
1=1
AND ROWNUM_REPLACE < 100

或者您也可以使用以下内容:

SELECT * FROM TABLE T
ORDER BY T.COLUMN
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY;

【讨论】:

以上是关于Oracle 中的 ROWNUM 有替代品吗?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 中的 OUTER APPLY 有啥替代方案吗?

SQL*PLUS for Oracle 有啥好的替代品吗?

Oracle Linux 真的是 CentOS 的更好替代品吗

在.net中使用OracleConnection类提示过时,请问针对oracle数据库的连接有其他新类替代吗?

Oracle 10g 中的 LISTAGG 替代方案

jdk12中appletviewer的替代方案