Oracle分页存储过程的实现

编辑
  • 文档创建者:文档助手1
  • 浏览次数:11299次
  • 编辑次数:14次
  • 最近更新:Kevin-s 于 2019-07-01
  • 1. 描述

    这里以 Oracle 数据库中的 SCOT T用户的 EMP 表为例,编写一个分页存储过程,要求是:

    输入表名、每页显示记录数、当前页,返回总记录数、总页数和返回的结果集。

    2. 具体步骤

    2.1 创建包

    由于需要返回查询出来的结果集,需要在 PL/SQL 中创建一个 Package,这个包里面定义一个 ref cursor 类型,用于记录 SQL 语句查询出来的结果集。如下图:

    创建包的代码如下:


    create or replace package pagingPackage as  
        type paging_cursor is ref cursor;  
        end pagingPackage;

    2.2 分页过程

    接下来开始 Oracle 的分页过程,我们可以用 select emp.*,rownum from emp; 来表示出每行的行标。然后可以根据行标对内容进行分页,下面这个 SQL 语句可以作为 Oracle 分页的模板。


    select * from   
        (select t1.*,rownum rn from (select * from emp) t1 where rownum<=12)  
        where rn>=8;

    2.3 存储过程

    有了上面的 ref cursor 类型和分页模板,下面开始编写分页的存储过程,如下图:

    具体代码如下:

    create or replace procedure paging
        (tableName in varchar2 ,--表名
        pageSizes in number,--每页显示记录数
        pageNow in number,--当前页
        rowNums out number,--总记录数
        pageNum out number,--总页数
        paging_cursor out pagingPackage.paging_cursor) is
        --定义部分
        --定义sql语句,字符串
        v_sql varchar2(1000);
        --定义两个整数,用于表示每页的开始和结束记录数
        v_begin number:=(pageNow-1)*pageSizes+1;
        v_end number:=pageNow*pageSizes;
        begin
          --执行部分
          v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin;
          --把游标和sql语句关联
          open paging_cursor for v_sql;
          --计算rowNums和pageNum
          --组织一个sql语句
          v_sql:='select count(*) from '||tableName;
          --执行该sql语句,并赋给rowNums
          execute immediate v_sql into rowNums;
          --计算pageNum
          if mod(rowNums,pageSizes)=0 then
            pageNum := rowNums/pageSizes;
            else
              pageNum := rowNums/pageSizes+1;
              end if;
          end;

    2.4 测试分页

    点击模板>模板数据集或者直接在数据集面板中,点击+号,添加一个存储过程,切换到 Oracle 数据库所在的数据连接,双击所需要添加的存储过程,如下图:

    点击预览,需要输入参数,如下图:

    输入参数后,点击确定,返回三个数据集,如下图:


    数据集可以同时查看多个结果集,如下图所示:


    注:在调用存储过程时,需要设置下 pageNow 这个参数的默认值,否则不会返回数据集。

    附件列表


    主题: 数据连接
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]