oracle分页存储过程

CREATE OR REPLACE PROCEDURE DivPageBySql(pstrSql       in varchar2,
                                         pnPageSize    in NUMERIC,
                                         pnPageIndex   in NUMERIC,
                                         pnRowCount    out NUMERIC,
                                         pageResultSet out SYS_REFCURSOR) IS

  v_pfrist    number;
  v_sql       varchar2(8000);
  v_PageCount number;
  v_min       number;
  v_max       number;
  v_sql1      varchar2(100);
  v_sql2      varchar2(100);
  v_sql3      varchar2(8000);
BEGIN

  --查询总记录的SQL
  v_sql := 'select count(*) from (' || pstrSql || ')';
  --执行SQL把总记录结果得到
  execute immediate v_sql
    into pnRowCount;
  --求出总页数
  v_PageCount := ceil(pnRowCount / pnPageSize);

  -- 如果传进来的页数大于最后一页,默认返回最后一页数据
  v_pfrist := pnPageIndex;
  IF (v_pfrist > v_PageCount) THEN
    v_pfrist := v_PageCount;
  end IF;

  --显示页的最大记录排行值
  v_max := v_pfrist * pnPageSize;
  --显示页的最小记录排行值
  v_min := v_max - pnPageSize + 1;

  --分页SQL
  v_sql1 := 'select * from (select rownum rn,t.* from ';
  v_sql2 := ' t ) where rn between ' || v_min || ' and ' || v_max;
  v_sql3 := v_sql1 || ' ( ' || pstrSql || ' ) ' || v_sql2;
  open pageResultSet for v_sql3;

END DivPageBySql;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值