使用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 ...
随机推荐
- Beta阶段敏捷冲刺五
一.举行站立式会议 1.当天站立式会议照片一张 2.团队成员报告 林楚虹 (1) 昨天已完成的工作:排行榜功能.完善从数据库读取单词放入缓存功能(即完善select.js) (2) 今天计划完成的工作 ...
- node之jade和ejs的使用方法 jade篇
let express = require('express'); let consolidate = require('consolidate'); let app = express(); // ...
- SQLSERVER 备份数据库的注意事项
1. SQLSERVER 有一个压缩备份集的功能,能够实现大概15%的压缩比(跟数据类型不同而不同) 之前竟然没发现...浪费了好多磁盘资源.. 多学习多思考..
- 《Effective C#》快速笔记(一)- C# 语言习惯
目录 一.使用属性而不是可访问的数据成员 二.使用运行时常量(readonly)而不是编译时常量(const) 三.推荐使用 is 或 as 操作符而不是强制类型转换 四.使用 Conditional ...
- leetcode:Reverse Integer 及Palindrome Number
Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, retur ...
- Jenkins之前置替换脚本内容
在执行Jenkins任务前,需要修改执行的工程的某个文件中的内容,在前置步骤中编写脚本进行修改. Pre Steps Windows batch script @echo off CHCP setlo ...
- s-axis-config-tdata
- codeforces471B
MUH and Important Things CodeForces - 471B It's time polar bears Menshykov and Uslada from the zoo o ...
- 聊聊我怎么系统学习Linux技能并快速提高的
随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能.而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱好者们的喜爱.今天我们就来和大家一起聊一聊Linux操作系 ...
- OpenGL 使用 PBO 高速复制屏幕图像到内存或者纹理中
如果你想给游戏做个截图功能,或者想把屏幕图像弄成一个纹理,你就非常需要 PBO 了 通常情况下,你想把屏幕图像的像素数据读到内存需要用 glReadPixels 然后 pixels 参数传进去一块内存 ...