以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分页【原】的更多相关文章

  1. 使用rownum对oracle分页

    以Student表为例进行分页 建表及插入 -- 有表结构如下 create table STUDENT ( sno INTEGER, sname ), sage INTEGER ); -- 插入数据 ...

  2. [转]oracle分页用两层循环还是三层循环?

    select t2.* from --两层嵌套 (select t.* , rownum as row_numfrom t where rownum <=20) t2 where t2.row_ ...

  3. oracle 分页(rownum的理解) 以及 树节点的查询

    1:什么是rownum, rownum的生成, rownum相关的符号操作 Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条rownum=1, 第二条=2. 对于 O ...

  4. Oracle ROWNUM用法和分页查询总结

    **************************************************************************************************** ...

  5. oracle分页与rownum

    Oracle分页(limit方式的运用) Oracle不支持类似于 MySQL 中的 limit. 但你还是可以rownum来限制返回的结果集的行数. 第一种 select * from a_matr ...

  6. Oracle ROWNUM用法和分页查询总结(转)

    [转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...

  7. [Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

    关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- ...

  8. [转]Oracle ROWNUM用法和分页查询总结

    本文转自:http://blog.csdn.net/fw0124/article/details/42737671 ****************************************** ...

  9. Oracle 分页 ROWNUM 两种分页方法和ROWID用法

    一 原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 测试表 CREATE TABLE A ( AID NUMBER() primary key, ANAME ...

随机推荐

  1. PAT L2-001 紧急救援

    https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 作为一个城市的应急救援队伍的负责人,你有一张 ...

  2. Docker中安装Nexus3

    https://blog.csdn.net/sqandczm/article/details/78560710 https://hub.docker.com/r/sonatype/nexus/ htt ...

  3. 软件工程_3rd weeks

    本周上课的第一件事就是四人组队做工程,因为之前没有太多的准备,所以过程有些仓促,只是最后的结果是好的.有了自己的队伍和课题.感觉就应该这样,平时的我们比较随意,没有一丝的紧迫感,这样会督促着我们完成任 ...

  4. Delphi中根据分类数据生成树形结构的最优方法

    一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...

  5. linux ACL权限

    利用这两个指令就可以了: getfacl:获取某個文件的 ACL 设置 setfacl:设置某個文件的 ACL 规范 [root@study ~]# setfacl [-bkRd] [{-m|-x} ...

  6. BZOJ4551[Tjoi2016&Heoi2016]树——dfs序+线段树/树链剖分+线段树

    题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...

  7. BZOJ1500[NOI2005]维修数列——非旋转treap

    题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作: 请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格 输入 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初 ...

  8. matplotlib imshow

    简单用法: imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colormap), 默认绘制 ...

  9. GNOME Shell Extension常用扩展

    这篇博文的,主要目的是为了方便我和大家安装GNOME扩展.我将我安装过的所有扩展列在此处. 常用扩展 Clipboard Indicator https://extensions.gnome.org/ ...

  10. sscanf,sprintf 通过字符串与其它类型进行方便快捷的输入和输出

    http://c.biancheng.net/cpp/html/296.html 头文件:#include <stdio.h> sscanf()函数用于从字符串中读取指定格式的数据,其原型 ...