共计 564 个字符,预计需要花费 2 分钟才能阅读完成。
问题: 今天在工作中,在 service 中调用分页查询列表接口的时候,返回的到页面的数据中总是存在缺失的数据,还有重复的数据。
分析:select * from (select ROWNUM rn,t.* from (select * from student order by class) t where ROWNUM <![CDATA[<]]>#{1.endIndex}) where rn <![CDATA[>=]]>#{1.startIndex}
当 endIndex 为 3 和为 5 的时候 ROWNUM 发生了变化
id | student | class | rownum |
1 | zhao | 2 | 1 |
2 | qian | 2 | 2 |
3 | li | 2 | 3 |
id | stuent | class | rownum |
1 | zhao | 2 | 1 |
3 | li | 2 | 2 |
4 | song | 2 | 3 |
2 | qian | 2 | 4 |
5 | yang | 2 | 5 |
在上表中 qian 和 li 的 rownum 发生了变化
总结:Oracle 分页语句中:
1 不存在 order by 则系统根据 rowid 来排序
2 若存在 order by 则 order by 后面的限制的列必须要能确定唯一,或者最小粒度的列能确定唯一(如 id 列)如上 class 都相同,则可以加上
order by class,id 或者 order by class,rowid
更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12
:
正文完
星哥玩云-微信公众号