PL/SQL分页

来源:互联网 发布:linux下挂载硬盘 编辑:程序博客网 时间:2024/06/06 12:34
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;


原创粉丝点击