oracle公用分页存储过程

来源:互联网 发布:冰箱品牌知乎 编辑:程序博客网 时间:2024/05/21 22:58
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;
0 0
原创粉丝点击