现在一般对Oracle 分页查询实现如下
select * from (
select a.*,rownum r from (
自己的sql
) a where rownum <=?
) where r > ? 如果这个sql 按一个含有重复值的字段排序 就会产生在不同页查出重复记录,并且某些记录查不到的现象(不是一定产生)
测试代码如下 CREATE TABLE TEST (
ID VARCHAR2(10) NOT NULL,
OD VARCHAR2(10) NULL
)
GO --插入测试数据
insert into TEST
select level,case when level<=3 then level else null end from dual connect by level<=10
go
--测试分页结果
第1-5条
select * from (
select a.*,rownum r from (
select t1.id from TEST t1
order by t1.od desc
) a where rownum <=5
) where r > 0
返回结果
行 ID R
1 4 1
2 8 2
3 7 3
4 6 4
5 5 5 第6-10条
select * from (
select a.*,rownum r from (
select t1.id from TEST t1
order by t1.od desc
) a where rownum <=10
) where r > 5
返回结果
行 ID R
1 6 6
2 5 7
3 3 8
4 2 9
5 1 10 可以看到第一个结果集中id=5和id=6 在第二个结果集中也查到了 同时id=9 和id=10的记录都没查到 解决方案如下
如果出现满足上述两个条件的SQL
order by 后再加上表的主键;
如本例中
改为order by t1.od desc,t1.id 后现象消失 如果有更好的解决方法, 希望能告知= =
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Hibernate SQL 方言Oracle 分区表 Range分区相关资讯 Oracle数据库基础教程
- 在Oracle数据库中插入含有&符号的 (03/06/2013 09:20:14)
- Oracle 执行计划更改导致数据加工 (02/13/2013 14:45:04)
- 判断Oracle Sequence是否存在 (02/13/2013 14:32:26)
| - Oracle数据库中无法对数据表进行 (02/26/2013 14:24:58)
- Oracle 在同一台主机上建立用户管 (02/13/2013 14:40:58)
- Oracle em 无法启动,报not found错 (02/13/2013 14:29:48)
|
本文评论 查看全部评论 (0)