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;
PL/SQL分页
最新推荐文章于 2024-09-20 20:49:53 发布