Oracle数据库分页存储过程
CREATE OR REPLACE PROCEDURE WP_ALL_PAGINATION
(
TABLENAME_IN in varchar2, -- 表名
PAGESIZE_IN in number := 20, -- 页尺寸
PAGEINDEX_IN in number := 1, -- 页码
ORDERSYNTAX_IN in varchar2, ---排序的具体语法
CONDITION_IN in varchar2 := \'\', -- 查询条件 (注意: 不要加 where)
FIELDSNAME_IN in varchar2:=\'*\', --显示列
ONLYFIELD_IN in varchar2 :=\'*\',--唯一字段
COUNT_OUT in out number,
cur_out OUT sys_refcursor
)
as
tempSql varchar2(8000):=\'\';
countSql varchar2(8000):=\'\';
strSql varchar2(8000):=\'\';
condition varchar2(8000):=CONDITION_IN;
fieldsName varchar2(1000):=\'\';
begin
if condition is null then
condition := \'1=1\';
end if;
fieldsName := trim(FIELDSNAME_IN);
if fieldsName != \'*\' then -- 不为 \'*\'
tempSql := \'select \'|| FIELDSNAME_IN ||\' from \'||TABLENAME_IN||\' where \'||condition||\' \'||ORDERSYNTAX_IN;
else
tempSql := \'select a.* from \'||TABLENAME_IN||\' a where \'||condition||\' \'||ORDERSYNTAX_IN;
end if;
--记录集
strSql := \'select t.*,rownum as num from (\'||tempSql||\') t \';
strSql := \'select * from (\'|| strSql ||\') tt where tt.num<=\'||PAGESIZE_IN||\' and tt.num>\'||PAGEINDEX_IN;
--为了排序,重新组织语句
--strSql := \'select * from (\'|| strSql||\') tt \'||ORDERSYNTAX_IN;
--记录总数
countSql := \'select \'||ONLYFIELD_IN||\' from \'||TABLENAME_IN||\' where \'||condition;
countSql := \'select count(distinct \'||ONLYFIELD_IN||\') as Total from (\'|| countSql ||\') t\';
--dbms_output.put_line(strSql);
execute immediate countSql into COUNT_OUT;
OPEN cur_OUT FOR strSql;
end;