当前位置:   article > 正文

Oracle中的order by分页排序问题_oracle 带主键 分页

oracle 带主键 分页

今天在系统测试的过程中,测试人员发现自己新添加的科目添加到系统中在页面默认分页查询中没有找到自己新加的科目(分页过程中页面显示数据确实和数据表中的数据总量一致),但是通过系统的搜索功能是可以查询的到数据?提了一个bug?

解决bug的过程:

系统中有一个科目表subject_manage表结构如下

  1. create table SUBJECT_MANAGE
  2. (
  3. ID VARCHAR2(32) not null,
  4. SUBJECTNAME VARCHAR2(50),
  5. EXAMTASKID VARCHAR2(32),
  6. EXAMTYPE VARCHAR2(100)
  7. )
  8. comment on table SUBJECT_MANAGE
  9. is '用于高考、成考、自考等考试类型的科目日常管理。';
  10. -- Add comments to the columns
  11. comment on column SUBJECT_MANAGE.SUBJECTNAME
  12. is '科目名称';
  13. comment on column SUBJECT_MANAGE.EXAMTASKID
  14. is '考试类型ID';
  15. comment on column SUBJECT_MANAGE.EXAMTYPE
  16. is '考试类型名称';
  17. comment on column SUBJECT_MANAGE.STARTTIME
分页sql的语句为

<pre name="code" class="sql">select * from ( select row_.*, rownum rownum_ from (  select id,subjectname,examtaskid, examtype  from subject_manage where 1=1   order by examtype ) row_ where rownum <= index * pagesize) table_alias where table_alias.rownum_ >= (index - 1) * pagesize + 1

 当页面分页到index=3或index=4的时候就出现了重复数据,当时查看subject_manage表中的examtype字段有空值,当时就怀疑会不会是空字段引起的问题,就换了表中的id为排序字段,测试果然好使,之后就将examtype字段中为空的行填充一个默认值,再进行查询还是有重复字段 

examtype 列并不能确定其唯一性,那么ORACLE在每次执行排序时并不能确定数据的唯一性,导致同样的排序顺序但是每次运行时并不能保证得到一样的结果。

解决办法

select * from ( select row_.*, rownum rownum_ from (  select id,subjectname,examtaskid, examtype  from subject_manage where 1=1   order by examtype,id ) row_ where rownum <= index * pagesize) table_alias where table_alias.rownum_ >= (index - 1) * pagesize + 1
有以上的结论之后处理方法也就简单明了了,Order By中的字段必须能够确保唯一即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/268606
推荐阅读
相关标签
  

闽ICP备14008679号