博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

IT圈中人

o~_~o
  ujnjt.cublog.cn

关于作者
姓名:jiang tao
职业:it
年龄:26
位置:.cn
个性介绍:吾将上下而求索
|| << >> ||
我的分类


oracle 分页存储过程

包头:

create or replace package JT_P_page is
  -- Author : ujnjt
  -- Created : 2007-8-5 16:43:50
  -- Purpose : 分页功能

  -- Public type declarations
  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;

 
调用方法:
 

-- Created on 2007-8-5 by ujnjt

declare
  psqlContent varchar2(1000);
  pageIndex number;
  pageCount number; --返回的分页数
  pageSize number; --每一页的记录数
  rowscount number; -- 返回的记录总数

  return_cur JT_P_PAGE.type_cur;
  curr_id pay_en_voucher.id%type;
  curr_rn number;
begin
  psqlContent := 'select rownum as rn , t.id from pay_en_voucher t';
  pageIndex := 0;
  pageSize := 20;
  JT_P_PAGE.Pagination(pageIndex,
                       psqlContent,
                       pageSize,
                       pageCount,
                       rowscount,
                       return_cur);
  if return_cur%isopen then
    close return_cur;
  end if;
  
  for Counter in 0 .. pageCount - 1 loop
  pageIndex := Counter;
  JT_P_PAGE.Pagination(pageIndex, psqlContent, pageSize, pageCount, rowscount, return_cur);
  if return_cur%isopen then
    dbms_output.put_line('第' || (pageIndex + 1) || '页数据开始');
    loop
      fetch return_cur
        into curr_rn, curr_id;
      if (return_cur%notfound) then
        exit;
      end if;
      dbms_output.put_line(curr_rn);
      dbms_output.put_line(curr_id);
      dbms_output.put_line('--------');
    end loop;
    dbms_output.put_line('第' || (pageIndex + 1) || '页数据结束');
    close return_cur;
    dbms_output.put_line('=========================================');
  end if;
end loop;
end;

发表于: 2007-08-05,修改于: 2007-08-05 18:41,已浏览637次,有评论1条 推荐 投诉


网友评论
网友: 本站网友 时间:2007-08-06 12:01:06 IP地址:222.64.7.★
psqlContent varchar2(1000);
  pageIndex number;
  pageCount number; --返回的分页数
  pageSize number; --每一页的记录数
  rowscount number; -- 返回的记录总数
  return_cur JT_P_PAGE.type_cur;
  curr_id pay_en_voucher.id%type;
  curr_rn number;
详情咨询021-51695858   QQ:1209636   消息来自time
官方网站: www.abcnic.com 
关键词:虚拟主机 空间租用 免费空间 ASP空间 PHP空间 NET空间  ASP虚拟主机 
PHP虚拟主机 NET虚拟 BLOG虚拟主机 全能虚拟主机 全能空间 数据库 程序虚拟主机 

全国第一家虚拟主机:支持伪静态.有利于提高排名

15G全能空间年付500元/月付50元 可免费试用
5GB 独立WEB空间、5GB 企业邮箱空间、5GB MYSQL数据库 
IIS连接数据 500 个、500GB/月流量、共享日志文件空间 

企业邮箱功能 
赠送5GB 超大企业邮箱,500个Email企业邮箱用户 
自动回复、自动转发、POP3、SMTP收发信、SMTP发信认证 
邮件过滤、邮件拒收、邮件夹管理、邮件域管理、定制邮件数 

数据库功能 
支持5GB MSSQL数据库空间,5个用户数据库、Access 

主机功能支持 
采用安全稳定的Win2003 .net2.0 架构 
支持ASP、PHP、ASP.NET、PERL等脚本、支持自定义CGI 
全面支持.net2.0版本,独立的Application应用池,
支持SSI(Shtml),支持FrontPage扩展 
可免费自行绑定5个域名、500个解析、500个子域名 



 发表评论