oracle分页查询结果集重复问题&解决方法
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,做项目时,无意间发现了分页上的一个bug,在此记录一下:首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复
千家信息网最后更新 2025年01月20日oracle分页查询结果集重复问题&解决方法
做项目时,无意间发现了分页上的一个bug,在此记录一下:
首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复现象,SQL语句如下:
--前10条记录select * from (select row_.*, rownum rownum_ from (select t.idcard, count(1) from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard order by count(1) asc) row_ where rownum <= 10) where rownum_ > 0;--第11条-第20条记录select * from (select row_.*, rownum rownum_ from (select t.idcard, count(1) from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard order by count(1) asc) row_ where rownum <= 20) where rownum_ > 10;
出现以上错误时,先是反复增加/删除where之后的条件,不断测试,貌似发现了一些端倪,错误记录都发生在count(1)的值相同时,于是在网上好一阵搜索,可还是没有找到解决办法;
没办法了,最后还是硬着头皮去找官网的一些demo,从中观察用法,探索者、摸索着,就有了以下的版本,经测试可以返回正确结果集,修改后如下:
select * from (select row_1.*, rownum rownum_ from (select * from (select t.idcard idcard, count(1) total from sampling.v_unvoucher_blacklist t where 1 = 1 group by t.idcard) order by total,rownum asc) row_1 where rownum <= 10) where rownum_ > 0;
总结:order by语句应当遵循条件唯一性原则,否则oracle不保证每次查询的结果集都相同。
详细介绍请参考oracle官网:
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
结果
语句
错误
相同
办法
条件
还是
测试
查询
不断
从中
原则
后台
唯一性
大部分
手动
无意间
是在
版本
现象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
客户说软件开发价格高
企业微信服务器异常20110
网络安全从本质上讲是保证
长宁区网络技术服务市场报价
软件开发人才驻点开发方案
网络安全广播稿2020
北京联速网络技术有限公司
数据库营销技术案例
网络安全交易的安全防范
敏捷软件开发英文注释版
饥荒电脑版怎么开专用服务器
软件开发信息公司
国外服务器上传不了文件
jdbc的数据库事务控制
网络技术人员QQ号
群晖服务器接投影仪
计算机网络技术有英语课吗
天谕手游服务器苹果安卓
set服务器上文件怎么下载
超市管理系统数据库表
新承网络技术有限公司
四川九洲科技软件开发
大丰收软件开发
2020年网络安全技术应用
比较好的软件开发电话
汽车mpu软件开发
购买正版数据库的原因
计算机网络技术专科实习时间
软件开发和测试工作怎么样
我是网络安全小卫士主题