您的位置:首页 > 数据库 > Oracle

Oracle由于排序字段错误,导致分页数据错误,错误原因真的想不到!!!

2016-04-19 10:49 316 查看
由于数据过多,经常使用分页的方法减少数据,相同的数据,相同的SQL,相同的系统,只是排序字段不同,会导致分页数据错误?
不可能?确实不可能,我也是这么想想的!

    同一个程序,同一张表,同样的SQL,只有排序字段不同,就导致了分页数据不同是正常的,但分页数据错误,可能吗?
 而且最奇怪的是,第一页数据是正确的,第二页,第三页,第四页数据完全相同,第五页数据又是正确的!!!什么原因!!!

程序问题,但其他的表也是用的是同样的方法,是正确的。没有出现第二页,第三页,第四页数据完全相同的情况!!不是程序问题!!
SQL错误,其他的表也是相同的方法,是正确的,不是SQL的问题!!!
把SQL排序字段修改为主键后,没有出现第二页,第三页,第四页数据完全相同的情况!好像也不是SQL 的问题。
基本的SQL如下: select fidfinreim40_0_,fsigndate40_0_
from
( select row_.*, rownum rownum_ from
( SELECT this_.fidfinreim as fidfinreim40_0_,
this_.freferdate as freferdate40_0_ FROM EAS.V_QFinreim this_ WHERE 1=1
ORDER BY this_.freferdate desc
)
row_ where rownum <=:p0
)
where rownum_ >:p1;fidfinreim是主键,freferdate是一个日期类型的字段。

第二页参数, p0 = 30 :p1 = 15
第三页参数, p0 = 45:p1 = 30

第四页参数,  p0 = 60:p1 = 45

第五页参数,  p0 = 75:p1 = 60

只需要把ORDER BY 后边的freferdate这个改为fidfinreim就是正确的,但使用freferdate就是错误的!!!而且第一页数据是对的,第二页,第三页,第四页数据完全相同,
第五页数据又是对的,什么原因?
看来问题是因为排序字段,但和排序字段有什么关系呢?从来没听过因为排序字段导致这种数据错误的!!!
只能相关的数据查出来:





发现问题没?中间的数据freferdate完全相同,这个原因导致的!!!看来是排序不稳定,oracle数据库的问题!!!
oracle数据库的使用的不稳定的排序算法!!之前看数据结构是知道排序算法有一个稳定性的问题,但一直没想到有什么实际的影响,看来这个真是一个活生生的例子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: