oracle 分页问题解决方案_oracle

昨天做完项目后让测试测试了一把,测试说分页查询貌似不起作用,翻到第4页以后,看到的数据结果都是相同的。
当时我就觉得很纳闷,不可能啊,分页组件应该是好的,咋可能有问题呢。带着疑问,我打开了自己的ide,在自己的机器上跑了一把,果然有问题。
有问题就要找问题
首先把2条查询结果相同的sql打印出来到数据库中执行:
sql1:

复制代码 代码如下:

select *
from (select t.*, rownum rn
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode
from (select t.eid t_e_id,
t.ename t_e_name,
t.etel t_e_tel,
t.areaid t_e_areacode,
t.biz_delete_time,
decode(areaid, '0730', '0', '1') orderseq
from vr_enterprise t
where t.eid not in (select eid from t_biz_erelation))
order by orderseq, biz_delete_time nulls last) t
where rownum < 25)
where rn >= 19
sql2:
select *
from (select t.*, rownum rn
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode
from (select t.eid t_e_id,
t.ename t_e_name,
t.etel t_e_tel,
t.areaid t_e_areacode,
t.biz_delete_time,
decode(areaid, '0730', '0', '1') orderseq
from vr_enterprise t
where t.eid not in (select eid from t_biz_erelation))
order by orderseq, biz_delete_time nulls last) t
where rownum <18)
where rn >= 12

结果显示大多数行是相同的。
为了找到问题所在,只有先一步一步的精简化sql,看在哪一步出的问题。
于是找到了,问题出现在where rownum<18的时候数据改变了,为什么加了个where条件结果就会变呢?
表示想不通啊。。。。。
没办法,只好baidu了,baidu了半天,都没人给个解释啊。。。。。
后来同事说,换个写法试试,于是改了另一种写法,如下:

复制代码 代码如下:

select *
from (select t.*, rownum rn
from (select t_e_id, t_e_name, t_e_tel, t_e_areacode
from (select t.eid t_e_id,
t.ename t_e_name,
t.etel t_e_tel,
t.areaid t_e_areacode,
t.biz_delete_time,
decode(areaid, '0730', '0', '1') orderseq
from vr_enterprise t
where t.eid not in (select eid from t_biz_erelation))
order by orderseq, biz_delete_time nulls last) t)m
where m.rn >= 1 and m.rn <25

这个方法果然凑效,凑效是凑效,关键是为什么前面那种方法不行呢?抓问题要刨根问底。
看来baidu不行,得换google搜索了。google搜索总是喜欢被china government墙掉,没办法,网上只好找了个chrome插件才解决了。
找呀找找呀找,在oracle的ask tom上,tom详细的介绍了rownum的用法,在这里http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
One important thing about using this pagination query is that the ORDER BY statement should order by something unique. If what you are ordering by is not unique, you should add something to the end of the ORDER BY to make it so.
看到这样一句话,原来用order by的时候还需要增加order by的唯一性,不然rownum就会有问题。哇哈哈哈,太开心了,功夫不费有心人呀,找到问题的症结了,当然就好解决了。
这权当是一次排错的经历,特此记录下来,看来google还是比baidu强大很多啊,以后要好好学英文,不然遇到问题没发解决。

时间: 2024-11-13 08:46:57

oracle 分页问题解决方案_oracle的相关文章

sql-jsp +oracle分页问题 主要是在SQL语句上

问题描述 jsp +oracle分页问题 主要是在SQL语句上 <%@ page language=""java"" contentType=""text/html; charset=UTF-8"" pageEncoding=""UTF-8""%> <%@page import=""java.sql.*""%><!DO

oracle分页 删除rownum 此列

问题描述 oracle分页 删除rownum 此列 oracle 分页查询 不知道表有多少列的前提下 查询语句 为 SELECT * FROM (SELECT ROWNUM RowNumber,t.* FROM table t WHERE ROWNUM <=100) WHERE RowNumber >=10 查询出来的包含 rownum 这一列 ,如何用sql语句将此列删除掉 解决方案 select b.* from (select rowid rn,rownum from tablename

一个简单的oracle分页存储过程的实现和调用

oracle|存储过程|分页|oracle|存储过程|分页 在看了众多的分页存储过程以后发现都是针对sqlserver的,而没有oracle的,因此想写一个关于oracle的存储过程,因为我用到的数据库是oracle.---------------------------------------------------------------------------------------------------------------------------------------------

Oracle分页方法及示例

环境 Oracle 11gR2 + SQLPlus 问题 Oracle分页 解决 --创建测试 表 SQL> create table test 2 ( 3 id number primary key, 4 name varchar2(20) not null 5 ); 表已创建. --创建序列 SQL> SQL> create sequence seq_wgb_test; 序列已创建. --插入数据 SQL> insert into test(id, name) values(s

如何解决Oracle分页查询中排序与效率问题

本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC from tZDYSX t,tuser u,lborganization o where t.cjr=u.id and u.orgid=o.orgcode and t.gx = 1 order by ID 结果如下: RN  I

mysql、sqlserver、oracle分页,java分页统一接口实现

mysql.sqlserver.oracle分页,java分页统一接口实现  定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量  oracle分页:  select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart  sqlServer分页:             select * from ( select top

得到oracle分页SQL语句的函数-三层嵌套sql

     //获取Oracle分页语句 传入参数:strsql:查询所有记录的语句 pageno:当前页  pagesize:一页显示的记录数) public static String getOnePageSql(String strSql, int pageSize, int pageNo) {  return new StringBuffer("select   *   from (select   A.*,rownum   as   my_rownum   from (")  

mysql、mssql及oracle分页查询方法详解_数据库其它

本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返

Oracle大数据解决方案——未来企业的理想选择

过去的这几年里,随着交易型IT向交互型IT过渡,企业数据开始呈现爆炸性的增长.而由于社交媒体的兴起.数字传感器的大量应用和移动设备的大面积普及等因素直接导致了各类海量大数据的迅速产生.这一类多结构化的数据市场价值并不高,但是其中庞大的数据量却蕴含着一笔隐藏的巨大财富.由此可见,应该如何对大数据进行高效的治理已经越来越成为业界关注的话题了. 据2011年Unisphere Research的调查显示,未来三年企业非结构化的大数据还将继续快速增长,其中隐藏的客户行为和业务运营等重要信息,也将对企业的