在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升
create or replace procedure Sp_QueryDatePage ( tableName in varchar2,--表名 fieldes in varchar2,---查询结果显示字段 wherecase in varchar2,---查询条件 pageSize in number, --页记录数 pageNow in number,--当前页 orderField varchar2,-排序字段,为空表示不排序 orderFlag number,- 排序标识 0:正序 1: 倒序 myrows out number ,--总记录数 myPageCount out number ,---总分页 p_cursor out SP_QueryDatePackage.SP_QueryDate_cursor ----返回记录数 ) is v_sql varchar2(10000); --定义两个整数 v_begin number:=(pageNow -1)* pageSize+1; --开始记录 v_end number:=pageNow* pageSize; -- 结束记录 --排序sql v_orderSql varchar2(100):=''; v_wherecase varchar2(1000):=''; begin -- 判定排序 if orderFiled is not null then if orderFlag =0 then v_orderSql:='ordey by'|| orderField' else if orderFlag =1 then v_orderSql:='ordey by'|| orderField||desc; else null; end if; end if; --条件语句 if v_wherecase is not null then v_wherecase :='where' || wherecase; end if; v_sql:='select * from (select t1.*,rownum rn from (select '||fields||'from'||tablename|| v_wherecase||''|| v_orderSql ||') t1 where rownum<='||v_end||') where rn >='|| v_begin --把游标和sql关联 open p_curson for v_spl; --计算myrow 和MypageCount v_sql :='select count(*) from '||tableName||v_wherecase||''||v_orderSql; execute immediate v_sql into myrows; -- 计算myPageCount (页数) if mod(myrows,Pagesize)=0 then myPageCount:=myrows/Pagesize; else myPageCount:=myrows/Pagesize+1; end if;