Oracle中用于分页的LIMIT和OFFSET的替代方法

10 浏览
0 Comments

Oracle中用于分页的LIMIT和OFFSET的替代方法

这个问题已经有答案了:

如何在排序后限制Oracle查询返回的行数?

我正在开发一个Web应用程序,需要对排序结果进行分页。我通常使用LIMIT/OFFSET来完成这个目的。

在Oracle中,分页排序的最佳方法是什么?我看到一些示例使用rownum和子查询。那是不是正确的方法?你能给我一个将此SQL翻译为Oracle的示例吗:

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 LIMIT 14

(我正在使用Oracle 10g,如果有用的话)

谢谢!


回答:

使用karim79提供的下面的链接,此SQL看起来像:

SELECT * FROM (
    SELECT rownum rnum, a.* 
    FROM(
        SELECT fieldA,fieldB 
        FROM table 
        ORDER BY fieldA 
    ) a 
    WHERE rownum <=5+14 ) WHERE rnum >=5

admin 更改状态以发布 2023年5月24日
0
0 Comments

因为你使用的是10g版本,所以你应该能够使用分析函数简化ROWNUM方法

SELECT fieldA, 
       fieldB
  FROM (SELECT fieldA,
               fieldB,
               row_number() over (order by fieldA) rnk
          FROM table_name)
 WHERE rnk BETWEEN 5 AND 14;

0
0 Comments

从oracle 12c开始,您可以使用前N个查询。

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 ROWS FETCH NEXT 14 ROWS ONLY;

http://www.oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php

0