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就是错误的!!!而且第一页数据是对的,第二页,第三页,第四页数据完全相同,

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

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

只能相关的数据查出来:




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

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




  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值