解决方案 »

  1.   

    在排序字段后再加上rowid排序
    order by d.doc_year  desc,ROWID
    字段值相同的时候的排序,这些记录的先后顺序取决于数据读取的先后,因此这样取出的结果可能每次排序都不是一样的
    稳妥起见,在排序的后面加上rowid或是表的主键
      

  2.   

    这个我也有想过,所以后来我在orderby 后面又直接加了主键。但是,我依然不太明白,为什么会这样。
    虽然你说“记录的先后顺序取决于数据读取的先后”,但是我加了那个rownum啊。麻烦版主能再详细说两句。
      

  3.   

    首先第N页和第N+1页的数据获取是执行了两次查询得到的结果
    这两次查询中查询
    select doc_seq,doc_title from doc_card d where 1=1  and handover_state =1 and  if_store =2 and  archive_id=1 and room_id=3  and arc_type=0  order by d.doc_year  desc
    得到的结果顺序有可能是不一样的,也就是说再用rownum筛选前的结果就是不一样的
      

  4.   

    那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。
      

  5.   

    那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。
    如果你这两页的doc_year全部相同的话不排除有这个可能
      

  6.   

    那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。
    如果你这两页的doc_year全部相同的话不排除有这个可能
    如你所说,这两页的doc_year是相同的。
    我现在假设有三页doc_year都是相同的,那么我点击第一页后,再点击第二页,这时是不是又进行了排序了呢?就算每次排序后顺序可能不一样,但如果第二页跟第一页的内容一模一样的话,就应该不能用排序顺序不一样来解释了吧。
      

  7.   

    那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。
    如果你这两页的doc_year全部相同的话不排除有这个可能
    如你所说,这两页的doc_year是相同的。
    我现在假设有三页doc_year都是相同的,那么我点击第一页后,再点击第二页,这时是不是又进行了排序了呢?就算每次排序后顺序可能不一样,但如果第二页跟第一页的内容一模一样的话,就应该不能用排序顺序不一样来解释了吧。
    这个是数据缓冲区的问题,由于第一次结果已经在缓冲区了,第一次查询的结果恰好也可以作为第二次查询的结果,数据库就直接从缓冲区返回结果了
      

  8.   

    那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。
    如果你这两页的doc_year全部相同的话不排除有这个可能
    如你所说,这两页的doc_year是相同的。
    我现在假设有三页doc_year都是相同的,那么我点击第一页后,再点击第二页,这时是不是又进行了排序了呢?就算每次排序后顺序可能不一样,但如果第二页跟第一页的内容一模一样的话,就应该不能用排序顺序不一样来解释了吧。
    这个是数据缓冲区的问题,由于第一次结果已经在缓冲区了,第一次查询的结果恰好也可以作为第二次查询的结果,数据库就直接从缓冲区返回结果了
    根据你所说的,我再查询了相关资料及作了实验。现在我还有最后一个问题:
    比如第一页的第一条数据A的rownum为1,那么要出现上述问题,到了第二页的时候,A的rownum如何变为为16(假设一页15条数据)?因为在翻页的时候那个select表的语句是没有更改的,那么rownum应该也是不会有变化的啊。求解。