当前位置: 代码网 > it编程>数据库>Oracle > oracle实现分页全过程

oracle实现分页全过程

2025年11月06日 Oracle 我要评论
oracle实现分页oracle sql可以使用rownum和oracle的伪列功能来实现分页。1、一个基本的分页查询语句的例子假设你想从一个名为"my_table"的表中获取第1

oracle实现分页

oracle sql可以使用rownum和oracle的伪列功能来实现分页。

1、一个基本的分页查询语句的例子

假设你想从一个名为"my_table"的表中获取第11到20行数据:

select *
from (
    select 
        my_table.*, 
        rownum as row_num
    from my_table
    where rownum <= 20
)
where row_num >= 11;

这个查询使用子查询和rownum来获取前20行数据,然后在外部查询中使用where条件过滤掉前10行数据,以便只返回第11到20行数据。

请注意:

  • 在使用rownum时,需要在子查询中首先选择要使用的行,并将其作为结果的一部分返回。
  • 然后在外部查询中,通过where过滤结果。

在程序中使用则可以传入page和size进行分页:

   select *
    from (
        select 
              my_table.*,  
            rownum as row_num
        from my_table
        where rownum <= page * size
    )
    where row_num > ((page-1) * size);

实际上就是通过嵌套sql 使用rownum在内层sql确定最大边界,在外层sql确定最小边界;

2、要实现指定页数

你需要知道每页的记录数和要显示的页码。

例如,如果每页显示10条记录,并且你想要显示第3页的记录,那么你需要跳过前20条记录(前两页中的所有记录)并返回10条记录。

以下是一个示例查询,它使用offset和fetch first语句实现分页和指定页数:

select *
from my_table
order by my_column
offset 20 rows
fetch first 10 rows only;

在这个例子中,offset子句指定要跳过前20行记录(即前两页中的所有记录),fetch first子句指定要返回接下来的10行记录(即第3页的记录)。order by子句用于指定排序顺序。

如果你想要显示不同的页数,只需要将offset和fetch first子句中的行数根据需要调整即可。

3、要同时指定每页显示条数和页数

你可以使用offset和fetch first语句结合计算来实现。

以下是一个示例查询,它可以指定每页显示的条数和页数:

select *
from (
    select 
        my_table.*, 
        rownum as row_num
    from my_table
    order by my_column
)
where row_num > ((page_number - 1) * page_size)
offset (page_number - 1) * page_size rows
fetch first page_size rows only;

在这个查询中,子查询使用rownum分配一个唯一的行号,并按照指定的列名进行排序。

外部查询使用where子句过滤出所需的行,并使用offset和fetch first语句返回指定的页数和每页的记录数。

page_number变量是指定的页数,page_size变量是每页要显示的记录数。

请注意:

  • offset和fetch first语句的顺序很重要。
  • offset必须在fetch first之前指定,以确保正确地跳过所需的行数。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com