使用rownum对oracle分页
以Student表为例进行分页
建表及插入
-- 有表结构如下
create table STUDENT
(
sno INTEGER,
sname VARCHAR2(100),
sage INTEGER
); -- 插入数据
insert into student (SNO, SNAME, SAGE) values (19, 'Bob', 39); insert into student (SNO, SNAME, SAGE) values (15, 'Bob', 35); insert into student (SNO, SNAME, SAGE) values (3, 'Bob', 23); insert into student (SNO, SNAME, SAGE) values (11, 'Bob', 31); insert into student (SNO, SNAME, SAGE) values (7, 'Bob', 27); insert into student (SNO, SNAME, SAGE) values (6, 'Kite', 26); insert into student (SNO, SNAME, SAGE) values (2, 'Kite', 22); insert into student (SNO, SNAME, SAGE) values (18, 'Kite', 38); insert into student (SNO, SNAME, SAGE) values (14, 'Kite', 34); insert into student (SNO, SNAME, SAGE) values (10, 'Kite', 30); insert into student (SNO, SNAME, SAGE) values (4, 'Mike', 24); insert into student (SNO, SNAME, SAGE) values (12, 'Mike', 32); insert into student (SNO, SNAME, SAGE) values (16, 'Mike', 36); insert into student (SNO, SNAME, SAGE) values (8, 'Mike', 28); insert into student (SNO, SNAME, SAGE) values (20, 'Mike', 40); insert into student (SNO, SNAME, SAGE) values (5, 'T&%T', 25); insert into student (SNO, SNAME, SAGE) values (17, 'T&%T', 37); insert into student (SNO, SNAME, SAGE) values (9, 'T&%T', 29); insert into student (SNO, SNAME, SAGE) values (21, 'T&%T', 41); insert into student (SNO, SNAME, SAGE) values (1, 'T&%T', 21); insert into student (SNO, SNAME, SAGE) values (13, 'T&%T', 33);
表内容

纯sql分页
SELECT * FROM (
SELECT ROWNUM RN,A.* FROM (
SELECT *
FROM STUDENT ORDER BY SNAME ASC
)A WHERE ROWNUM <= 20 )
WHERE RN >=11;
mybatis分页
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="student">
<typeAlias alias="Student" type="com.bobo.code.model.Student" />
<select id="select" resultClass="Student">
SELECT * FROM
(
SELECT A.*,ROWNUM RN FROM
(SELECT * FROM STUDENT) A
WHERE <![CDATA[ ROWNUM <= #maxRowNum#]]>
)
WHERE <![CDATA[RN >= #minRowNum#]]>
</select> <select id="count" resultClass="java.lang.Integer">
SELECT count(*) FROM STUDENT
</select> </sqlMap>
queryMap.put("minRowNum", (pageNumber - 1)*Pager.DEFAULT_PAGE_SIZE +1);//oracle rownum起
queryMap.put("maxRowNum", pageNumber * Pager.DEFAULT_PAGE_SIZE );//oracle rownum止
为何一定要用3层select分析:
3层时sql分页语句:
SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM (SELECT * FROM STUDENT ORDER BY SNO ASC) A
WHERE ROWNUM <= 10)
WHERE RN >= 1;
3层时图解查询顺序:

2层时sql语句:
SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM STUDENT A
WHERE ROWNUM <= 10
ORDER BY SNO ASC)
WHERE RN >= 1;
2层时图解查询顺序:

开发过程异常
无法转换为内部表示
当Student的属性id 为Integer,和数据库中的字段ID为VARCHAR2 导致不对应会取不出数据,报错(无法转换为内部表示):

如果sql语句错误,比如多了一个逗号之类的,会报错(ORA-00936):

使用rownum对oracle分页的更多相关文章
- 使用rownum对oracle分页【原】
以Student表为例进行分页 建表及插入 -- 有表结构如下 create table STUDENT ( sno INTEGER, sname ), sage INTEGER ); -- 插入数据 ...
- [转]oracle分页用两层循环还是三层循环?
select t2.* from --两层嵌套 (select t.* , rownum as row_numfrom t where rownum <=20) t2 where t2.row_ ...
- oracle 分页(rownum的理解) 以及 树节点的查询
1:什么是rownum, rownum的生成, rownum相关的符号操作 Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条rownum=1, 第二条=2. 对于 O ...
- oracle分页与rownum
Oracle分页(limit方式的运用) Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数. 第一种 select * from a_matr ...
- Oracle ROWNUM用法和分页查询总结(转)
[转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...
- Oracle ROWNUM用法和分页查询总结
**************************************************************************************************** ...
- [Oracle]关于Oracle分页写法的性能分析及ROWNUM说明
关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- ...
- [转]Oracle ROWNUM用法和分页查询总结
本文转自:http://blog.csdn.net/fw0124/article/details/42737671 ****************************************** ...
- Oracle 分页 ROWNUM 两种分页方法和ROWID用法
一 原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 测试表 CREATE TABLE A ( AID NUMBER() primary key, ANAME ...
随机推荐
- Python 爬虫学习 urllib
网页抓取 # -*-coding: utf-8 -*- import urllib url = "http://www.cndzz.com/" html = urllib.urlo ...
- 电脑结构和CPU、内存、硬盘三者之间的关系
前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- linux ssh服务器
默认配置文件在: /etc/ssh/下 有两个需要配置的文件: ssh_config ssh_client配置文件 sshd_config ssh服务器的配置文件 两个文件的详细介绍和配置方法 ...
- 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念
http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 ...
- 利用css3新增选择器制作背景切换
之前写css3的时间都是捡项目需要的来用,没有系统的学习过,这几天好好的补了一下css3的知识,真的获益匪浅!觉得新增的那些选择器是有用至极的!今天就来所这几天的所学做一个点击标签切换背景的效果,是纯 ...
- 使用jquery的delay方式模拟sleep
javascript中并没有原生sleep函数可供调用,一般来说为了实现sleep功能,大都是采用SetTimeout来模拟,以下片段采用jquery的delay方法来模拟,也算是提供了另外一个视角吧 ...
- Android学习笔记(六)
活动的生命周期 Android中的活动是可以重叠的,每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键就会销毁最上面的活动. Android是使用任务(Task)来管理活动的,一个任务就是一 ...
- sql server 相似度对比
转自:http://www.dotblogs.com.tw/rachen/archive/2008/10/07/5611.aspx 函數一.產生 Like 比對用字串 ) ) ) as begin / ...
- 自动装箱(boxing)和自动拆箱(unboxing)
摘自:http://www.codeceo.com/article/java-boxing-unboxing.html Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器 ...
- DOM节点访问
简而言之,DOM(即文档对象模型)是一种将XML或HTML文档解析成树形节点的方法.通过DOM的方法与属性,我们就可以访问到页面中的任何元素,并进行元素的修改.删除以及添加的操作.同时,DOM也是一套 ...