Oracle分页存储过程

create or replace package JT_P_page is
type type_cur is ref cursor;                    --定义游标变量用于返回记录集
procedure Pagination  (Pindex in number,        --要显示的页数索引,从0开始
                       Psql in varchar2,        --产生分页数据的查询语句
                       Psize in number,         --每页显示记录数
                       Pcount out number,       --返回的分页数
                       Prowcount out number,    --返回的记录数
                       v_cur out type_cur      --返回分页数据的游标
                       );
end JT_P_page;
--定义包主体
create or replace package body JT_P_page is
  procedure Pagination(Pindex in number, --要显示的页数索引,从0开始
                       Psql in varchar2, --产生分页数据的查询语句
                       Psize in number, --每页显示记录数
                       Pcount out number, --返回的分页数
                       Prowcount out number, --返回的记录数
                       v_cur out type_cur --返回分页数据的游标
                       ) AS
    v_sql VARCHAR2(1000);
    v_Pbegin number;
    v_Pend number;
  begin
    v_sql := 'select count(*) from (' || Psql || ')';
    execute immediate v_sql into Prowcount; --计算记录总数
    Pcount := ceil(Prowcount / Psize); --计算分页总数
    --显示任意页内容
    v_Pend := Pindex * Psize + Psize;
    v_Pbegin := v_Pend - Psize + 1; 
    --Psql := 'select rownum as rn , t.* from pay_en_voucher t'; --要求必须包含rownum字段   
    v_sql :=  'select * from (' || Psql || ') where rn between ' || v_Pbegin || ' and ' || v_Pend;         
    open v_cur for v_sql;
  end Pagination; 
end JT_P_page;

 

还算不错

posted @ 2009-08-29 18:08  zhangkang  阅读(135)  评论(0编辑  收藏  举报