ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个通用的存储过程分页

一个通用的存储过程分页

原创 Linux操作系统 作者:Stilmyi 时间:2010-06-23 12:33:07 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-06-23

  • 博文量
    1
  • 访问量
    791