前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java oracle分页查询语句_oracle 分页语句

java oracle分页查询语句_oracle 分页语句

作者头像
全栈程序员站长
发布2022-09-01 11:12:18
1.5K0
发布2022-09-01 11:12:18
举报

大家好,又见面了,我是你们的朋友全栈君。

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

SELECTOBJ_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 FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum >= 1)

where row_id < 26

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

SELECTOBJ_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 FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum >= 26)

where row_id < 51

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

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

不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果

— 所以直接用只能从1开始

— rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

SELECTOBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY

FROM( SELECT m.*,rownum row_id

FROM(SELECTOBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY

FROMWKF_BUSINESS_CONFIG ) m

WHERE rownum <51)

where row_id >= 26

48304ba5e6f9fe08f3fa1abda7d326ab.png
48304ba5e6f9fe08f3fa1abda7d326ab.png

将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://javaforall.cn/140167.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com