Oracle由于排序字段错误,导致分页数据错误,错误原因真的想不到!!!

倖福魔咒の 提交于 2019-11-27 17:29:57

由于数据过多,经常使用分页的方法减少数据,相同的数据,相同的SQL,相同的系统,只是排序字段不同,会导致分页数据错误?

不可能?确实不可能,我也是这么想想的!



    同一个程序,同一张表,同样的SQL,只有排序字段不同,就导致了分页数据不同是正常的,但分页数据错误,可能吗?

 而且最奇怪的是,第一页数据是正确的,第二页,第三页,第四页数据完全相同,第五页数据又是正确的!!!什么原因!!!


程序问题,但其他的表也是用的是同样的方法,是正确的。没有出现第二页,第三页,第四页数据完全相同的情况!!不是程序问题!!

SQL错误,其他的表也是相同的方法,是正确的,不是SQL的问题!!!

把SQL排序字段修改为主键后,没有出现第二页,第三页,第四页数据完全相同的情况!好像也不是SQL 的问题。

基本的SQL如下:

 select fidfinreim40_0_,fsigndate40_0_
 from 
 ( select row_.*, rownum rownum_ from 
 ( SELECT this_.fidfinreim as fidfinreim40_0_,
 this_.freferdate as freferdate40_0_ FROM EAS.V_QFinreim this_ WHERE    1=1   
 ORDER BY this_.freferdate desc 
 ) 
 row_ where rownum <=:p0
 ) 
 where rownum_ >:p1;
fidfinreim是主键,freferdate是一个日期类型的字段。

第二页参数, p0 = 30 :p1 = 15

第三页参数, p0 = 45:p1 = 30

第四页参数,  p0 = 60:p1 = 45

第五页参数,  p0 = 75:p1 = 60

只需要把ORDER BY 后边的freferdate这个改为fidfinreim就是正确的,但使用freferdate就是错误的!!!而且第一页数据是对的,第二页,第三页,第四页数据完全相同,

第五页数据又是对的,什么原因?

看来问题是因为排序字段,但和排序字段有什么关系呢?从来没听过因为排序字段导致这种数据错误的!!!

只能相关的数据查出来:




发现问题没?中间的数据freferdate完全相同,这个原因导致的!!!看来是排序不稳定,oracle数据库的问题!!!

oracle数据库的使用的不稳定的排序算法!!之前看数据结构是知道排序算法有一个稳定性的问题,但一直没想到有什么实际的影响,看来这个真是一个活生生的例子。




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!