oracle 分页语句

通过Debug调试,发现第一页查询到的数据没有问题,第二页时,查不到数据!

第一页时,控制台打印的sql语句:

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY
FROM
    ( SELECT m.*,rownum row_id
       FROM (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM WKF_BUSINESS_CONFIG ) m
        WHERE rownum >= 1)
where row_id < 26 

第二页时,控制台打印的sql语句:

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY
FROM
    ( SELECT m.*,rownum row_id
       FROM (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM WKF_BUSINESS_CONFIG ) m
        WHERE rownum >= 26)
where row_id < 51 

通过分析和查询oracle分页的知识,发现是SQL语句有问题!

不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果
-- 所以直接用只能从1开始
-- rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。

正好,查询第二页的时候,上面的sql语句犯了这个问题!

既然不能>=(大于或等于1的数值),那我就让rownum<大于1的数!

SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY
FROM
     ( SELECT m.*,rownum row_id
       FROM
            (SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY
             FROM WKF_BUSINESS_CONFIG ) m
             WHERE rownum <51)
where row_id >= 26 

将sql语句改成这样时,按照要求可以查询到数据!

既然遇到了Oracle分页查询的问题,正好复习下Oracle分页的相关知识!

在Mysql中,分页查询很简单!    分页查询使用的是limit关键字进行查询。它后面有两个参数

第一个参数是起始的位置,第二个参数是每页需要显示的条目数。

举例:商品表中有10条记录,现在需要进行分页显示,每页显示3条数据。现在需要查看第二页的数据。那么应该使用的sql语句是:

select * from product limit 3,3;                     第一个参数计算的公式为:(查询的页数-1)*每页显示条目数    即 (2-1)*3=3

在Oracle中分页就没有那么简单!Oracle中是通过rownum实现分页查询的!

不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果
所以直接用只能从1开始
rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。
select * from student where rownum>=1;

如果想要用rownum不从1开始,需按下面方法使用
select a1.* from (select student.*,rownum rn from student) a1 where rn >5

分页查询一
select * from (select a1.*,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;

分页查询二
select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;

分页查询三
select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;

原文地址:https://www.cnblogs.com/xasdcf/p/10213841.html

时间: 2024-08-01 06:54:31

oracle 分页语句的相关文章

Oracle分页语句

select * from (select A.*,rownum rd from (select * from [tablename] where [condition] order by  [condition] ) A  where rownum<=[endpage*pagesize]) where rd>=[startpage*pagesize]; 1.select * from [tablename] where [condition] order by  [condition] 按条

简单的oracle分页语句

SELECT * FROM ( SELECT rownum rn,te.* FROM (SELECT * FROM  tb_enterprise) te  WHERE rownum <= 10) WHERE rn>1 1.先通过rownum查询出数据小于最大记录数,同时把rownum查询出来 2.外层通过sql再通过rownum取最小范围

MySQL oracle 分页

(1)MySql的Limit m,n语句 Limit后的两个参数中,参数m是起始下标,它从0开始:参数n是返回的记录数.我们需要分页的话指定这两个值即可. 比如:查询10行记录,起始行从3开始 SELECT * FROM emp LIMIT 3, 10; (2)Oracle数据库的rownum 子查询要包含在括号内. 将子查询放在比较条件的右侧. 单行操作符对应单行子查询,多行操作符对应多行子查询. 子查询可以出现在select,from,where,having子句中 子查询不可以出现在gro

Oracle分页查询语句的写法(转)

分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.Oracle分分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHER

常用sql 分页语句(Oracle)

常用的Oracle查询语句 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然! sql语句如下: SELECT *        FROM (Select ROWNUM AS ROWNO, T.*       from k_task T      where Flight_date between to_date('20060501', 'yyyymmdd') and       to_date('20

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条

ORACLE 分页查询

Oracle之分页查询 Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的范围.

Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)

众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉有点浪费性能. Mybatis Generator是Mybatis的代码生成工具,可以生成大部分的查询语句. 本文提供的分页解决方案是新增Mybatis Generator插件,在用Mybatis

oracle分页查询结果集重复问题&解决方法

做项目时,无意间发现了分页上的一个bug,在此记录一下: 首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复现象,SQL语句如下: --前10条记录 select *   from (select row_.*, rownum rownum_           from (select t.idcard, count(1)                   from sampling.v_unvou