Oracle sql分页原理

本文详细探讨了Oracle SQL中的分页实现方式,重点讲解了如何利用ROWNUM伪列进行分页查询,并给出了具体的示例及常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文针对OracleSql分页原理进行研究学习,如有不对欢迎指正

Oracle的表中,除了开发者自己拟定的字段外还有一些,Oracle自动生成的虚拟字段(伪列),常用的有:

sysdate, systimestamp,RowNum ,RowID, CURRVAL, NEXTVAL,UID, USER,Level,ORA_ROWSCN

分页中常用RowNum进行分页;

建表:

按需添加记录:

通过可以查出


ROWNUM伪列是Oracle首先进行查询获取到结果集之后在加上去的一个伪列

ROWID可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。

按照一般分页思想

假设需要查询的记录的页码为2,每页显示3条记录,则需要显示出上面查询记录的ROWNUM在4-6的记录

就有了:

显示结果:

么!?

首先我们要知道:ROWNUM是Oracle查询出结果集之后再自动加上去的伪列

在进行

查询结果是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。在判断第一条记录也就是ROWNUM是否>=4时,第一条记录不符合条件被删除,第二条记录的ROWNUM变成了1,重复循环就永远没有满足条件的记录了;

解决方法是将查询出的结果集的ROWNUM作为数据另存到结果集中,不随结果集变化而产生变化就能解决了


由于ROWNUM不能使用>,可以改造查询语句



结果一致,没有问题

在java程序中的分页语句:

SELECT * FROM (SELECT ROWNUM rn,c.* FROM cource c WHERE ROWNUM<=pageNum*pageSize) WHERE (pageNum-1)*pageSize



全文结束,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值