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

由于数据过多,经常使用分页的方法减少数据,相同的数据,相同的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就是错误的!!!而且第一页数据是对的,第二页,第三页,第四页数据完全相同,

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

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

只能相关的数据查出来:

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

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

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

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/6692.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论