Oracle分页查询数据时数据错误及解析

主题:Oracle数据库分页查询数据时数据错误解析及解决方法。


一、问题描述

使用Oracle数据库的小伙伴可能或多或少会接触到对某表做数据分页查询的情况。在数据分页查询时,可能出现分页数据重复,甚至连翻好几页数据都有重复,或者干脆无任何变化。检查SQL执行情况发现几乎找不到任何错误,苦于不知什么原因以及如何解决,该文就针对该问题进行样例测试,带大家找到问题的解决办法。

二、样例测试

第一步:在Oracle数据库下建立一张名为student的测试表,该表一共三个字段:id、name、other,字段类型都为varchar2,并加入测试新增数据,id为主键,一共十条数据,具体如下图所示:

Oracle分页查询数据时数据错误及解析_第1张图片

第二步:因为测试数据较少,这里将进行假如每页6条数据的一个分页查询,根据上图所示数据,分页SQL及效果如下2图所示:
第一页:

Oracle分页查询数据时数据错误及解析_第2张图片

第二页:

Oracle分页查询数据时数据错误及解析_第3张图片

经过测试,我们发现第二页最后两条红色标记部分,出现了2条在第一页分页数据中出现的重复数据,大家可以仔细对比,也可以按照这个例子自己做一个测试。

第三步:根据不同表不同情况的测试,逐渐发现该情况主要集中在对具有相同重复数据的字段进行排序时,就可能导致分页数据产生重复的数据。而根据具有唯一性数据的字段进行排序则没有该情况发生。(这里不再进行测试,对过程感兴趣的小伙伴可以自己进行测试)

三、解决方案

根据以上测试情况,这里提出一种解决办法:找一个具有唯一性数据的字段,进行多字段同时排序。

结合唯一性数据一起排序,就会依照该唯一性字段进行参照,形成每条数据的唯一性。这里可以用ID,或者Oracle数据库自带的rowid都可以,最好找个带索引的字段,以提升查询效率。演示如下图所示:
第一页:

Oracle分页查询数据时数据错误及解析_第4张图片

第二页:

Oracle分页查询数据时数据错误及解析_第5张图片


至此,本文结束!


你可能感兴趣的:(疑难杂症,-,数据库)