PL/SQL分页

CREATE OR REPLACE PROCEDURE PROC_PAGER(
       tableName IN VARCHAR2,
       pageIndex IN INTEGER :=1,
       pageSize IN INTEGER :=10,
       condition IN VARCHAR2:=' WHERE 1=1 ',
       orderlist IN VARCHAR2:='',
       recountCount OUT INTEGER,
       pageCount OUT INTEGER,
       lresult OUT sys_refcursor
)
AS
       lcount INTEGER;
       sql_recordCount VARCHAR2(2000):='SELECT COUNT(*) FROM {TABLE_NAME}{CONDITION}';
       sql_pager VARCHAR2(2000):='
                SELECT * FROM
                       (
                         SELECT ROWNUM RN,model.* FROM
                                (
                                       SELECT * FROM {TABLE_NAME}{CONDITION}{ORDER_LIST}
                                ) model
                                WHERE ROWNUM<={TOP_COUNT}
                       ) WHERE RN>{PASS_COUNT}';
BEGIN

  --总条数
       sql_recordCount:=REPLACE(sql_recordCount,'{TABLE_NAME}',tableName);
          DBMS_OUTPUT.put_line(condition);
       
       IF (TRIM(condition) IS NOT NULL) THEN
              sql_recordCount:=REPLACE(sql_recordCount,'{CONDITION}',' WHERE ' LTRIM(LTRIM(UPPER(condition)),'WHERE'));
       ELSE
              sql_recordCount:=REPLACE(sql_recordCount,'{CONDITION}','');
       END IF;
       
       dbms_output.put_line(sql_recordCount);
       
       EXECUTE IMMEDIATE sql_recordCount INTO lcount;
       recountCount:=lcount;
      
       IF (recountCount mod pageSize) = 0 THEN
          pageCount:=recountCount / pageSize;
       ELSE
          pageCount:=FLOOR(recountCount / pageSize)+ 1;
       END IF;

  --分页
       sql_pager:=REPLACE(sql_pager,'{TABLE_NAME}',tableName);
       IF (TRIM(condition) IS NOT NULL) THEN
              sql_pager:=REPLACE(sql_pager,'{CONDITION}',' WHERE ' LTRIM(LTRIM(UPPER(condition)),'WHERE'));
       ELSE
              sql_pager:=REPLACE(sql_pager,'{CONDITION}','');
       END IF;
       IF (orderlist IS NOT NULL) THEN
          sql_pager:=REPLACE(sql_pager,'{ORDER_LIST}',' ORDER BY ' orderlist);
       ELSE
          sql_pager:=REPLACE(sql_pager,'{ORDER_LIST}','');
       END IF;

  sql_pager:=REPLACE(sql_pager,'{TOP_COUNT}',pageIndex*pageSize);
       sql_pager:=REPLACE(sql_pager,'{PASS_COUNT}',(pageIndex-1)*pageSize);
       DBMS_OUTPUT.put_line(sql_pager);
       OPEN lresult FOR sql_pager;     

  END PROC_PAGER;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值