oracle分页查询结果集重复问题&解决方法
发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,做项目时,无意间发现了分页上的一个bug,在此记录一下:首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复
千家信息网最后更新 2024年12月02日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安全错误
数据库的锁怎样保障安全
网络安全领域招聘
服务器可以进行机械硬盘启动吗
招聘软件开发人员的题目
嘉定区信息软件开发包括哪些
数据库怎样进行数据增幅
网络安全法二十七条
深圳电商软件开发联系人
数据库设置环境变量
广州内衣软件开发
服务器1 10087
网络安全保密管理自查报告
gta 服务器手动刷新
云南大学数据库技术期末考试
数据库访问被限制
网络安全奇闻趣事
网络安全的轮廓
网络安全和大数据哪个适合女生
锦江区开明软件开发工作室
淘宝的软件开发挂什么类目
河北专业软件开发推广
港口物流仿真数据库
群晖webdav服务器搭建
网络安全巡查员设立的目的
服务器可以进行机械硬盘启动吗
数据库代码创建学生信息表
太原新华互联网科技学校要多少分
从零基础学习软件开发
工作台服务器主机
数据库技术与应用考试重点
关于网络安全手抄