oracle的分页操作

oracle不像mysql中有limit(n,m)来进行分页操作,我们需要使用oracle的ROWNUM字段来进行分页。
首先来了解一下ROWNUM
ROWNUM是oracle中的伪字段,用来返回查询记录的行号,第一行分配的是1,第二行是2,以此类推。
在对oracle进行分类是,我们可以将需要查询的表的ROWNUM显示表示,然后使用"ROWNUM >= 起始记录行号 and ROWNUM <= 结束记录行号"进行条件筛选。
这里用到项目中某个分页查询来举例,整体sql如下:

select ori_3.*
  from (select ori_2.*, ROWNUM page_num
          from (select *
                  from (select y.bm,
                               y.scqymc,
                               y.spmc,
                               y.jyzt,
                               y.mc,
                               y.gg,
                               y.zhxs,
                               y.zbjg,
                               y.jx,
                               (select info
                                  from dictinfo
                                 where typecode = '003'
                                   and dictcode = y.jyzt) jyztmc
                          from ypxx y) ori_1
                 where ori_1.mc like '%片%') ori_2
         where ROWNUM <= 10) ori_3
 where ori_3.page_num >= 0;

我们进行层层拆分,由内而外结构如下:
1.最内层表有一个子查询,用来关联字典表来获得具体的数据,将查询结果命名为ori_1

select y.bm,
     y.scqymc,
     y.spmc,
     y.jyzt,
     y.mc,
     y.gg,
     y.zhxs,
     y.zbjg,
     y.jx,
     (select info
        from dictinfo
       where typecode = '003'
         and dictcode = y.jyzt) jyztmc
from ypxx y

2.对ori_1中的数据进行条件筛选,将查询结果命名为ori_2

select *
from  ori_1
where ori_1.mc like '%片%'

3.取出ori_2中的ROWNUM,同时通过ROWNUM和当前页结尾行数来对数据进行切割,返回结果为ori_3

select ori_2.*, ROWNUM page_num
from  ori_2
where ROWNUM <= 10) 

4.通过page_num和当前页开始行数再次对数据进行切割,返回的结果就是当前页显示的记录合集

select ori_3.*
from ori_3
where ori_3.page_num >= 0;

猜你喜欢

转载自blog.csdn.net/zhou373986278/article/details/83097809