您的位置:首页 > 数据库 > Oracle

oracle公用分页存储过程

2015-07-30 15:07 651 查看
create or replace PROCEDURE Common_Paging

(

    tableName in NVARCHAR2,--表名

    fields in  VARCHAR2,--查询结果显示字段

    wherecase in VARCHAR2,--查询条件

    pageSize in NUMBER,--页显示记录数

    pageNow in  NUMBER,--当前页

    orderField VARCHAR2,--排序字段,为空表示不排序

    orderFlag NUMBER,--排序标识 0:正序 1:倒序

    allRowNum out NUMBER,--总记录数

    allPageNum out NUMBER, -- 总分页数
p_cursor out pagingpackage.paging_cursor  --返回记录集

)as

--自定义部分

--定义sql语句字符串

para_sql varchar2(1000);

--定义两个整数

para_begin number:=(pageNow-1)*pageSize+1;

para_end number:=pageNow*pageSize;

--排序sql

para_orderSql varchar2(100);

para_wherecase varchar2(500);

begin

para_orderSql:='';

para_wherecase:='';

--执行部分

--如果orderField不为空,则进行排序,如果orderFlag=0为升序,1为降序

if orderField is  not null then

    if orderFlag=0 then

     para_orderSql:=' order by '||orderField;

    elsif orderFlag=1 then

     para_orderSql:=' order by '||orderField||' desc';

    else

     null;

    end if;

end if;

if wherecase is not null then

 para_wherecase:=' where '||wherecase;

 end if;

 para_Sql:='select * from

 (select t1.* ,rownum rn from(select '|| fields ||' from '||tableName||para_wherecase||' '||para_orderSql||') t1 where rownum<='||para_end||')

 where rn>='|| para_begin;

 dbms_output.put_line(para_Sql);

 --把sql游标和sql关联

 open p_cursor for para_Sql;

 

 --计算 allRowNum 和allPageNum

 --组织一个sql    

 para_sql:='select count(*) from '||tableName||para_wherecase ||' '||para_orderSql;

 --执行sql,并把返回的值赋给allRowNum

 execute immediate para_sql into allRowNum;

 --计算allPageNum

 if mod(allRowNum,pageSize)=0 then

  allPageNum:=allRowNum/pageSize;

  else

  allPageNum:=allRowNum/pageSize+1;

  end if;

allPageNum:=floor(allPageNum);

  --关闭游标

  --close p_cursor;

  end Common_paging;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 分页