春节封条Oracle中的orderby分页排序问题
今天在系统测试的过程中,测试⼈员发现⾃⼰新添加的科⽬添加到系统中在页⾯默认分页查询中没有找到⾃⼰新加的科⽬(分页过程中页⾯显⽰数据确实和数据表中的数据总量⼀致),但是通过系统的搜索功能是可以查询的到数据?提了⼀个bug?
西洋参功效解决bug的过程:
系统中有⼀个科⽬表subject_manage表结构如下弄巧成拙的近义词
create table SUBJECT_MANAGE
(
ID VARCHAR2(32) not null,
SUBJECTNAME VARCHAR2(50),
EXAMTASKID VARCHAR2(32),
EXAMTYPE VARCHAR2(100)
)
如何办社保卡comment on table SUBJECT_MANAGE
is '⽤于⾼考、成考、⾃考等考试类型的科⽬⽇常管理。';
-- Add comments to the columns
comment on column SUBJECT_MANAGE.SUBJECTNAME
三十英语怎么说
is '科⽬名称';
comment on column SUBJECT_MANAGE.EXAMTASKID保险营销话术
is '考试类型ID';
comment on column SUBJECT_MANAGE.EXAMTYPE
is '考试类型名称';
comment on column SUBJECT_MANAGE.STARTTIME
秩序是什么意思
guanyu
分页sql的语句为
<pre name="code" class="sql">lect * from ( lect row_.*, rownum rownum_ from ( lect id,subjectname,examtaskid, examtype from subject_manage
当页⾯分页到index=3或index=4的时候就出现了重复数据,当时查看subject_manage表中的examtype字段有空值,当时就怀疑会不会是空字段引起的问题,就换了表中的id为排序字段,测试果然好使,之后就将examtype字段中为空的⾏填充⼀个默认值,再进⾏查询还是有
重复字段
examtype 列并不能确定其唯⼀性,那么ORACLE在每次执⾏排序时并不能确定数据的唯⼀性,导致同样的排序顺序但是每次运⾏时并不
能保证得到⼀样的结果。
解决办法
lect * from ( lect row_.*, rownum rownum_ from ( lect id,subjectname,examtaskid, examtype from subject_manage where 1=1 order by examtype 有以上的结论之后处理⽅法也就简单明了了,Order By中的字段必须能够确保唯⼀即可