PLM之家PLMHome-工业软件践行者

[转载电子书] Oracle 实现分页查询!

[复制链接]

2017-11-3 16:22:57 3174 0

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82168
QQ
发表于 2017-11-3 16:22:57 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
0 ^; i# s) c9 z3 a3 o1 P$ h

2 [. w! V  K( o" {4 F1 G0 t# O使用oracle数据库查询数据时,每页展示数据有限,大部分情况下需要分页展示。如每页显示10条,一页一页查询出来。下面就来介绍下oracle分页实现
1 J: m1 Q6 s6 v; y) V1/ v) _! M6 M  {, |7 K: t, W
使用T_BASE_PROVINCE表作为测试演示使用,表字段如下
! D7 f9 M- t" {; w4 J7 W' Y9 LID        NUMBER(11,0)
0 Z! V" ^) N  T0 h0 c3 WPROVINCEID        VARCHAR2(6 BYTE)
0 W4 g  f: W  ]3 W, M% MPROVINCE        VARCHAR2(40 BYTE)
. |3 n5 F5 S3 M/ P: |# N+ q数据可以根据自己的需要,插入一定量的测试数据2 a: V% f  I8 ]) {3 a& |
oracle如何实现分页4 v+ n! @1 c: t9 |( \
2
+ s9 f- n1 L- M1 T: S5 R( m8 I查询下总共数据量& f/ W% \5 p4 H+ X" U/ U
select count(*) from T_BASE_PROVINCE;3 G. s4 q: J( h8 \7 a2 e: m7 V
在分页的时候,一般会显示总页数,需要先查询总数据量得到总页数,总页数=总量/每页显示记录数
* J  a# h, L* V% coracle如何实现分页  x) @6 J4 i5 y5 m% A! p" J
3- q6 l7 M' f! a2 z
前面的测试数据初始化完成之后,查询前20条大概有什么样的数据# g3 ?! N! Z8 B. H4 ^; T& ^
oracle如何实现分页
4 u! @6 O% f  A, Q8 y2 m: M4
9 `6 G" o$ f$ M1 {分页语句一:含order by排序,多一层嵌套,因为order by在select之后执行,不在里面写的话可能会出现不是预期的排序结果' w1 {- v! m& ^, s8 |' |/ x' v
select * + T5 `$ K% K. K8 y& q
from (select t.*, rownum rn, s3 _# g2 e3 U  Z6 \, `* ?
        from (select *' @9 @( Q: a- @- {, }
                from T_BASE_PROVINCE; r4 P8 `. b1 h$ Y" U
               order by id asc) t9 j. U% H7 C% B  n8 ^- K2 h% H5 t
        where rownum <= 20)9 n6 y6 `8 j9 y, F1 h
where rn > 10;# Z- |( `: N" D: ?) l0 x
oracle如何实现分页  t7 q" R' w$ h
5
; ~2 G6 p3 g  a1 K* \- u分页语句二:如果不需要排序,可以使用如下语句( s6 u! J0 {  k
select a1.* + P; Y: A( R# k0 o4 S" b; o
from (select t.*,rownum rn
$ k/ x6 c2 o) }; y. z! q; D        from T_BASE_PROVINCE t . e* @% j7 s" v  b6 X8 a. }* g
        where rownum <=20) a1 6 R1 L( L7 G' \& O
where rn >10;
6 E7 z) f* ^2 J% q- Ioracle如何实现分页
) `+ R3 Q& H( i/ }  h6
# q% o0 c. R9 v5 m7 {分页语句三:between and方式,性能没有上面的高,但写法简单
8 n; y# b. O: z4 }6 t2 Aselect a1.* * c1 }4 X0 G' }, g" ^0 ^
from (select t.*,rownum rn from T_BASE_PROVINCE t) a1
, [* Q& D% U) d8 ~7 ~! D4 gwhere rn between 11 and 20;0 T# l1 y; G# P* b' Q2 M
oracle如何实现分页
) c# X. m2 f/ [9 V& Q7
# Z, r# R/ d# P' o" j4 ]" z# K- U% w通用分页格式,page是页码,size是每页显示条数0 \. M: g" M8 P/ X# o- |
select * ' ]' {! Y# _4 q; o. S2 s
from (select t.*, rownum rn# j% P0 Q2 y) U1 W
        from (select *  J( F0 U- ^3 _) o
                from T_BASE_PROVINCE( H4 [# @/ |/ `8 a, d2 T0 }$ c8 j  c$ M
               order by id asc) t# b8 ^: i* t( Z, F( Z+ H
        where rownum <= page*size)
  W( r2 A# e# S+ j5 c" n" M/ Ywhere rn > (page-1)*size;
/ v) t5 T4 W3 ~  d3 x# U- ~
; x6 c- C& k! n7 r' [% l  Z  s
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了