Oracle 多分页查询 重复数据

使用 Oracle 的多分页查询语句,不同页面之间出现数据重复,但是数据库的数据是正确的,查询全部的时候也能显示出来。其数据如图1,图2 所示。但是当点击最后的页码时,数据会发生变化
          使用的 sql: SELECT * FROM(SELECT ROWNUM RN,TA.* FROM(SELECT A.*,B.*  FROM TALBE1 A LEFT JOIN TABLE2 B ON A.CSN_CD = B.DEV_ID WHERE A.CHK_BAT_NO='2016010800006100'  ORDER BY A.FEE_CHK_STS DESC DESC)TA WHERE ROWNUM <= '30'  )WHERE RN >= '21'
 其中排序的字段 FEE_CHK_STS 不是唯一字段,会发生变化
                                                     
                             图 1 第三页数据                                                            图2 第二页数据        
          原因: 如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序。 事实上,oracle没有进行任何排序操作,如果sql没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端。

    所以在没有使用排序sql的时候,分页返回的数据可能是按顺序的,也可能是杂乱无章的,这都取决与数据的存储位置。
在分页查询过程中,如果数据的物理位置发生了改变,就可能会引起分页数据重复的现象。 所以,要正确使用分页查询,sql语句中必须有排序条件。

    但是,在有排序条件的时候,仍然会出现数据重复的现象,这是为什么呢? 
    通过了解oracle的排序机理就会明白,出现这种情况的原因是因为排序列值的不唯一性。 Oracle这里使用的排序算法不具有稳定性,
    也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。

          解决方法:
           1.sql语句中需要有排序条件。 
              2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。

         转载博客: http://lelong.iteye.com/blog/1931159  
         非常感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值