本文原创于
http://hi.baidu.com/kaedemaple/blog/item/b430e72fbfc5763c1e308946.html
排序翻页的程序“BUG”
用hibernate查询的结果集进行分页显示,翻页显示中有少量记录是重复的。检查sql发现写法没什么问题
也就是oracle内部对结果集进行了排序,排序结果并非是你设置了order by关键字所预想得到的,比如你第2页有4条记录,翻到第3页,这些记录依然出现,但语句本身并没有任何问题
select * from nirvana.sfa_opportunity where status = 'selected' and sales_id ='xuyi'
order by repeat_flag asc
) t1 where rownum < 121 )
where (countrownum >= 101 )
select countrownum, company_name, member_id from ( select rownum countrownum , t1.* from (
select * from nirvana.sfa_opportunity where status = 'selected' and sales_id ='xuyi'
order by repeat_flag asc
) t1 where rownum < 101 )
where (countrownum >= 81 )
这两个查询中,发现了有重复记录
经过仔细检查,发现数据中repeat_flag基本都是重复的,这是不是导致排序后顺序不一样呢?结果测试后果然是这样,当rownum选择不同的情况下,内层排序后顺序可能不一样,也就是说,估计是和oracle的排序的实现细节有关系,比如内存分配的不一样就可能导致相同字段值排序后记录顺序的不一样。为此决定在order by repeat_flag 后面增加其他不同值的字段,在这里选择了唯一的ID号,从而解决了这个问题。
select countrownum, company_name, member_id from ( select rownum countrownum , t1.* from (
select * from nirvana.sfa_opportunity where status = 'selected' and sales_id ='xuyi'
order by repeat_flag asc ,ID
) t1 where rownum < 101 )
where (countrownum >= 81 )
分享到:
相关推荐
在描述中提到的问题中,当使用`ORDER BY`对包含非唯一值的列进行排序,并结合分页查询时,发现不同页码的数据可能会有重复。这进一步证实了`ORDER BY`在Oracle中的不稳定特性。在没有唯一索引或主键约束的情况下,...
要删除Oracle数据库表中的重复记录,有几种方法可以采用: ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到...
综上所述,通过对PGA和SGA的理解,尤其是对PGA中排序区大小的合理配置,以及对会话区中权限信息的有效利用,可以显著提高Oracle数据库的排序操作性能和整体安全性。这不仅对于数据库管理员来说至关重要,对于任何...
本文主要解决 Oracle 分页查询中排序与效率问题,通过实践和分析,提供了两种解决方案,并对比了两种方法的优缺点。 知识点 1: Oracle 分页查询的基本概念 Oracle 分页查询是指在查询结果中,通过限制行数来实现...
### Oracle数据库删除表中重复记录的方法 在Oracle数据库管理中,经常会遇到需要处理表中的重复数据的情况。重复数据不仅会占用不必要的存储空间,还可能导致数据统计错误或业务逻辑混乱等问题。因此,掌握如何有效...
删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...
通过对Oracle分页查询中的排序与效率问题的深入探讨,我们可以得出以下结论: - 使用合适的索引可以显著提高查询速度。 - 优化查询结构,减少不必要的计算和数据访问。 - 考虑使用高级技术如分区等来进一步提高大型...
1. **编程存储过程返回游标**:这种方式允许开发者在存储过程中对两批数据进行逐一比对,并将结果返回给调用者。这种方式灵活性高,但开发成本相对较大。 2. **使用临时表**:通过创建临时表来存储比较后的结果,...
总之,解决Oracle的bug问题需要对数据库原理有深入理解,熟练掌握诊断和调试技巧。同时,及时获取官方的更新和补丁,参与社区交流,可以有效提高问题解决的效率。在实际操作中,应养成良好的数据库管理和维护习惯,...
Oracle 查询重复数据并删除,只保留一条记录 Oracle 是一种关系型数据库管理系统,广泛应用于企业级数据库管理。然而,在实际应用中,数据重复问题经常会出现,例如在资源目录在线编目的资源项子表中存在多条重发...
在Oracle中,对数据进行排序是日常查询和分析工作中非常常见的一种需求。 首先,我们需要理解在Oracle中进行数据排序的基本语法,即SQL的ORDER BY子句。当我们在查询语句(如SELECT)中添加ORDER BY,Oracle会根据...
在Oracle数据库中,查询数据是日常操作的一部分,而有时候我们需要获取特定的数据集,例如每组中的最大几个记录或者找出重复的记录。这篇博客主要探讨如何实现这两个目标。 首先,我们来讨论如何查询每组中最大的三...
这种方法可以根据所有字段来判断重复记录,并返回无重复记录的结果集。 方法六:使用 Temp 表 第六种方法是使用 Temp 表来删除重复数据。例如,下面的语句可以删除表中多余的重复记录,只留下 rowid 最小的记录: ...
在"Oracle RAC Bug又见Bug(三)"这篇博文中,作者可能探讨了Oracle RAC在实际应用中遇到的一些问题和相应的解决策略,尤其是关于NULL相关的bug。虽然具体的细节没有给出,但我们可以根据这个主题来深入理解Oracle ...
Delphi 中调用 Oracle 的存储过程返回数据集是指在 Delphi 应用程序中调用 Oracle 数据库中的存储过程,并将存储过程的返回结果集显示在 Delphi 应用程序中。这种方式可以将 Oracle 数据库中的数据实时同步到 Delphi...
Oracle 中对中文字段进行排序.txt
标题:“ORACLE Bug ***”描述了Oracle数据库中的一个特定错误,该错误与库缓存互斥锁/共享池锁死锁问题有关。官方说明文档提供了关于该Bug的概述、影响的产品版本、固定该问题的补丁信息以及一些解决问题的建议。 ...
Oracle 排序是指在 Oracle 数据库中对数据进行排序的操作。排序是数据库查询语言中最基本的操作之一,它可以根据不同的条件对数据进行排序,实现数据的有序排列。 一、按字符方式排序 在 Oracle 中,可以使用 ...
本文将深入探讨如何在Oracle数据库中查询重复数据,理解SQL语句背后的逻辑,并掌握其实现方法。 ### Oracle查询重复数据的核心概念 #### 1. 重复数据的定义 在数据库术语中,重复数据通常指的是在数据集中存在一个...
Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中,需要创建两个Type类型:`myScalarType`和`myTableType...