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;