使用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分页与rownum
Oracle分页(limit方式的运用) Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数. 第一种 select * from a_matr ...
- Oracle ROWNUM用法和分页查询总结(转)
[转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...
- [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 ...
随机推荐
- 腾讯 xtestserver 基本使用教程~
刚刚简单录制了下 腾讯demo的基本测试脚本 成功~get新技能成功~开心ing~ 体验就是: 1.各种安卓机找开发者中心选项的usb调试模式太难找了.. 2.不管录制还是播放录制时都感觉好慢... ...
- shell脚本--文件测试
文件测试是指测试某一个文件或者目录是否存在 测试文件格式[ 操作符 目录或者文件 ] 注意左括号和操作符之间有一个空格,文件或者目录 与右边的括号之间也有一个空格. -d 测试是否为目录 -e ...
- Tomcat启动错误一例org.apache.catalina.core.StandardContext resources Start Error starting static Resources
org.apache.catalina.core.StandardContext resources Start Error starting static Resources 引发原因:Eclips ...
- Linux 下如何知道是否有人在使坏?
在 Linux 下查看用户的行为,不仅仅是网管要做的事,也是开发人员所应该具备的基本技能之一.为什么呢?因为有时其他同事在做一些很消耗资源的事情,比如在编译大型程序,可能会导致服务器变得很慢,从而影响 ...
- 注册鼠标右键CMD
Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\Directory\shell\runas] [HKEY_CLASSES_ROOT\D ...
- python之tkinter使用-多选框实现开关操作
# tkinter的Checkbutton实现开关操作 import tkinter as tk root = tk.Tk() root.title('开关') root.geometry('170x ...
- Hibernate的继承映射
对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: <hibernate ...
- 03 Zabbix4.0添加cisco交换机基本监控步骤
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 03 Zabbix4.0添加cisco交换机基本监控步骤 主题监控一台cisco网络设备的6项内容 ...
- luogu2607/bzoj1040 [ZJOI2008]骑士 (基环树形dp)
N个点,每个点发出一条边,那么这个图的形状一定是一个基环树森林(如果有重边就会出现森林) 那我做f[0][x]和f[1][x]分别表示对于x子树,x这个点选还是不选所带来的最大价值 然后就变成了这好几 ...
- HTML5小游戏-简单抽奖小游戏
换了新工作以后,专注前端开发,平常空闲时间也比较多,可以多钻研一下技术,写一下博客.最近在学习canvas,参考网上的slotmachine插件,用canvas实现了一个简单抽奖小游戏. ...