当前位置:   article > 正文

oracle 使用rownum进行分页的陷阱_where 0

where 0

同事遇到一个奇怪的问题,在使用下面分页导记录时发现分页后的记录跟总的记录数匹配(总的记录数大概25000),但是有些记录不存在,有些重复:

 

SELECT *

  FROM (SELECT row_.*, rownum rn

          FROM (select --省略几百行

                 order by sdate, mname, blevel asc) row_

         WHERE rownum <= 10000)

WHERE RN > 0

 

SELECT *

  FROM (SELECT row_.*, rownum rn

          FROM (select --省略几百行

                 order by sdate, mname, blevel asc) row_

         WHERE rownum <= 20000)

WHERE RN > 10000

 

SELECT *

  FROM (SELECT row_.*, rownum rn

          FROM (select --省略几百行

                 order by sdate, mname, blevel asc) row_

         WHERE rownum <= 30000)

WHERE RN > 20000

 

可能原因:

1  分页1--10000,10001--2000020000--30000sql执行计划不同,造成结果集记录的顺序不同(这个也许有可能,没有验证过)

2  排序算法(原来的3个字段(sdate, mname, blevel)不能保证唯一性)

 

 

能解释的现象:

1  总的记录数是一样的:因为总的记录数是不变的,不管记录的顺序怎么变,3段加起来的和是相等的

2  3段记

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签