oracle排序翻页后数据丢失

原创 2012年03月27日 16:54:15

今天又发生数据丢失的问题了,按查出来的总条数看是对的,但是具体数据时,会发现少了部分。这个问题以前也发生过,当默认查询没有用到排序时,翻页就会出现这种情况。

网上搜了下,说是oracle的问题,把它的文章转载过来留个档

 

“一般我们用Oracle的表都是堆表(Oracle存储表的一种方式),对于堆表,必须知道他的机制:

     全部扫描时,会按命中的顺序来获取数据,而不是以插入的顺序。这是一个必须了解的重要的数据库表概念:一般来讲,数据库表本质上是无序的数据集合。还应该 注意到,要观察到这种效果,不必在INSERT后接下来再使用DELETE;只需使用INSERT就可以得到同样的结果。如果我插入一个小行,那么观察到 的结果很可能是:取出行时默认的顺序为“小行、小行、大行”。这些行并不按插入的顺序获取。 Oracle会把数据放在能放下的任何地方,而不是按照日期或事务的某种顺序来存放。

 如果你的查询需要按插入的顺序来获取数据,就必须向表中增加一列,以便获取数据时使用这个列对数据排序。例如,这可以是一个数字列,有一个递增的序列(使 用Oracle SEQUENCE对象)。只需使用一个SELECT,其ORDER BY子句对这个列完成排序,这样就可以模拟插入顺序。这个顺序可能只是近似的,因为序号为55的行很可能在序号为54的行之前提交,因此,数据库中序号为 55的行可能放在前面。

 应该把堆组织表看作一个很大的无序行集合。这些行会以一种看来随机的顺序取出,而且取出的顺序还取决于所用的其他选项(并行查询、不同的优化器模式,等 待),同一个查询可能会以不同的顺序取出数据。不要过分依赖查询得到的顺序,除非查询中有一个ORDER BY语句!除非你的查询中有一个 ORDER BY,否则不要指望返回的数据会按某种顺序排序。 (另外,GROUP BY 也不会执行排序!ORDER BY 是无可替代的) 。”

我们这次出问题的应用虽然用了排序,但是由于使用的排序字段是个日期值,而数据表里存在大量的重复日期数据,导致Oracle的排序出现问题,所以一般按照某些字段排序后,我们需要再加一个order by id。

 

最后终结以下出现此问题的前提:

1、SQL分页

2、用了Oracle的堆表(如果你建表时候没有指定表类型,默认就是堆表)

3、按照且仅按照一个有大量重复数据的字段排序(或者压根就没排序)

 

相关文章推荐

jqGrid翻页时数据选中丢失问题

我在项目中使用jqGrid时,采用异步加载服务器数据,例如点击翻页、搜索时都重新加载数据。这样就会产生一个问题。问题描述:当对列表批量删除时,可以选择多个记录信息,选择当前页的第一条,点击下一页再选择...

ASP.Net 翻页后继续维持排序.doc

  • 2007年09月05日 16:28
  • 29KB
  • 下载

ng-grid的server端排序/列筛选/翻页/loading

关于server端排序/列筛选/翻页/loading的一些设置

Ruby On Rails框架下的翻页/排序插件

1. kaminari 官方主页:https://github.com/amatsuda/kaminari 首先在Gemfile文件中加入:gem 'kaminari' 然后通过bundle...

翻页查看文件,数据选取,非纯文本文件查看

翻页查看文件,数据选取,非纯文本文件查看

jQuery 自动翻页与数据同步

翻页原理 通过计算这几个参数: scrollTop()>=jQuery(document).height()-jQuery(window).height() 就可以知道已经滚动到底端了 jQu...
  • TLD_DLT
  • TLD_DLT
  • 2016年11月25日 17:25
  • 281

web前端经常遇到的json数据的翻页处理

作为web前端初入门第一次写博文攻城狮,提升自己,望大家批评指正,互相学习!这次写的是web前端经常遇到的json数据的请求和翻页处理。下面是代码: html部分: ajax请...
  • Owish
  • Owish
  • 2016年10月11日 14:07
  • 79

Yii: 设置数据翻页

一种方法是使用CPagination处理翻页需要的数据如:总数据项数,每页数据项数,当前页,然后在视图中使用CBasePager来绘制。控制器动作的代码示范:function actionIndex(...
  • iefreer
  • iefreer
  • 2012年05月26日 00:07
  • 5215

Dynamics CRM2013 sub grid中数据翻页问题

CRM2013中一个很低级很令人无语的BUG,见下图subgrid中的明细条目超过当前页设置的条目后会有翻页,在底下有个paging bar会显示条数、页数、当前所处页数 但sp1版本的CRM打上u...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle排序翻页后数据丢失
举报原因:
原因补充:

(最多只允许输入30个字)