暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle分页

张静懿 2025-03-19
208


Oracle 数据库提供了多种分页方法,以下是对分页实现方法的介绍:

使用 rowid 实现分页:
代码示例:
SELECT *FROM (SELECT RIDFROM (SELECT R.RID, ROWNUM LINENUMFROM (SELECT ROWID RIDFROM TABLE1WHERE TABLE1_ID = XXORDER BY order_date DESC) RWHERE ROWNUM <=20)WHERE LINENUM >=10) T1,TABLE1 T2WHERE T1.RID = T2.ROWID;
1
原理分析:首先通过 ROWNUM 查询到分页之后的 10 条实际返回记录的 ROWID,最后通过 ROWID 将最终返回字段值查询出来并返回。此方式的实现更加繁琐,通用性不是非常好,但在特定场景下有优势,比如经常要翻页到很后面的数据时,效率可能比其他方法高。
使用 rownum 实现分页:
代码示例:

方法一:

SELECT * FROM (SELECT a.*, ROWNUM rFROM my_table aWHERE ROWNUM <=30)WHERE r >=20;
1
方法二:结合 BETWEEN AND
SELECT * FROM (SELECT A.*, ROWNUM RNFROM (SELECT *FROM TABLE1WHERE TABLE1_ID = XXORDER BY GMT_CREATE DESC) A)WHERE RN BETWEEN 10 AND 20;
1
方法三:结合 MINUS
SELECT * FROM TABLE1WHERE ROWNUM <= 20MINUSSELECT * FROM TABLE1 WHERE ROWNUM <= 10;
1
优点是简单易懂,缺点是在查询大量数据时性能较差。
使用分页模板:
Oracle 的三层分页指的是在进行分页查询时,使用三种不同的方式来实现分页效果,分别是使用 ROWNUM、使用 OFFSET 和 FETCH、使用 ROW_NUMBER () OVER ()。

使用 OFFSET 和 FETCH:

SELECT * FROM my_tableORDER BY my_columnOFFSET20ROWSFETCH NEXT 10ROWSONLY;
1
使用 ROW_NUMBER () OVER ():
SELECT * FROM (SELECT a.*, ROW_NUMBER() OVER (ORDERBY my_column) rFROM my_table a)WHERE r BETWEEN21AND30;
1

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_56693899/article/details/143579451

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论