create or replace package body package_page is
procedure proc_page(
v_currenTable varchar2,--表名
v_currenPage int,--当前页码
v_maxNumber int,--每页最大数
v_where varchar2,--查询条件
v_field varchar2,--字段名
v_totalRecords out number,--结果集的长度
v_totalPages out number,--总共有多少页
v_records out cur_record --返回的结果集
)
is
v_cur_end number(4);--游标所在的结束位置
v_cur_begin number(4);--游标所在的开始位置
v_sql varchar2(1000);--要执行的sql语句
begin
v_sql:='select to_number(count(*)) from '||v_currenTable;
--获取总记录数
execute immediate v_sql into v_totalRecords;
--获取总页数
if mod(v_totalRecords,v_maxNumber) = 0 then
v_totalPages := v_totalRecords/v_maxNumber;
else
v_totalPages := ceil(v_totalRecords/v_maxNumber);
end if;
--获取游标所在的开始位置与结束位置
if v_currenPage=0 then
v_cur_begin:=0;
v_cur_end:=v_maxNumber+1;
elsif v_currenPage>=v_totalPages then
v_cur_begin:=(v_totalPages-1)*v_maxNumber;
v_cur_end:=v_totalPages*v_maxNumber;
else
v_cur_begin:=(v_currenPage-1)*v_maxNumber;
v_cur_end:=v_currenPage*v_maxNumber+1;
end if;
v_sql:='select * from (select rownum num,'||v_field||' from
'||v_currenTable||' where rownum<'||v_cur_end||' and
'||v_where||') where num>'||v_cur_begin;
DBMS_OUTPUT.put_line(v_sql);
open v_records for v_sql;
end proc_page;
end package_page;
2.gif
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24137449/viewspace-665948/
,如需转载,请注明出处,否则将追究法律责任。