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 有啥替代方案吗?
Oracle Linux 真的是 CentOS 的更好替代品吗