在今天项目开发中,遇到一个奇怪的问题,运用Oracle自身排序,然后将排序结果进行分页展示到前台时,发现数据有重复的现象。
这是数据表需要排序的全部结果,执行脚本:select * from ajb where ajlx='刑事案件' order by ajlx asc
结果展示为:
获取结果集的前13页,sql脚本如下:
select * from (select * from ajb where ajlx='刑事案件' order by ajlx asc) where rownum<=13
结果截图:
显然,这和总结果前13条内容不对应。
为什么会出现上面的问题?大家想想,这种情况还会发生重复的可能。原来是因为Oracle的弱排序,尤其对于汉字,将排序结果放在一张表中,再从该表中取数据,很容易出现问题。因为若排序(非唯一排序),所以查询出的表不再具有排序功能,所以从该表中取数据就会不对。
那么,遇到这中问题怎么解决呢?因为排序是若排序,所以有必要加一个强排序选项,将本文红背景脚本改为:select * from ajb where ajlx='刑事案件' order by ajlx,xh asc即可。