转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
如何在Oracle中使用游标来实现多重循环?[原创]         ★★★★

如何在Oracle中使用游标来实现多重循环?[原创]

作者:闵涛 文章来源:闵涛的学习笔记 点击数:699 更新时间:2009/4/22 22:04:45

这篇文章,是最近在写一个项目中所用的存储过程,由于是第一次接触oracle,其间花费了许多功夫,才把功能实现!特记录下来,以供参考!
[color=blue]create or replace package PSH_GPRSSTREAMSTAT is[/color]
[color=red]
  -- Author  : ADMINISTRATOR
  -- Created : 2004-12-8 10:56:01
  -- Purpose : GPRS流量统计状态
  -- 统计GPRS流量
[/color]
  type
    C_Cur is ref cursor;
  function Calcu_GPRSSTREAM return number;
end PSH_GPRSSTREAMSTAT;
-----------------------------------------------------------------------------
create or replace package body PSH_GPRSSTREAMSTAT is
 function Calcu_GPRSSTREAM return number
  is
    c_IPPackHeadLen constant number := 40;   -- 定义IP包头长度
    CURSOR c_SPINFO is
      select distinct spid from sh_spinfo where isactive = ''''0'''';

    c_MDTINFO C_Cur ;
    v_MDTINFO number;
     
    v_UpTransContentLens number(20,0);    -- 存放当前GPRS终端上传转发的信息内容长度  
    v_UpContentLens number(20,0);
    v_UpTotalLens number(20,0);      -- 累计GPRS终端上传的信息内容长度
    v_DownContentLens number(20,0); 
    v_DownTotalLens number(20,0);
    newID number(20,0);
   
  begin
    -- 初始化
    select max(statid) into newID from sh_gprsstreamstat;
    if (newID is null) then
      newID := 1;
    end if;

    for v_SPINFO In c_SPINFO loop         -- 首先获取SPID
     -- 其次遍历出与当前SPID对应的所有MDT
     open c_MDTINFo for select distinct mdtid from sh_mdtinfo where (isactive = ''''0'''') and (spid = v_SPINFO.spid);
      loop
      fetch c_MDTINFO into v_MDTINFO;
        exit when c_MDTINFO%notfound;
       
        v_UpContentLens := 0;
        v_UpTransContentLens := 0;
        v_UpTotalLens := 0;
        v_DownContentLens := 0;
        v_DownTotalLens := 0;
      -- 下面两个select语句是用来获得GPRS终端上传的信息流量
        select sum(length(content) + c_IPPackHeadLen) into v_UpContentLens from sh_gprsmdtupinfo where (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;
        select sum(length(content) + c_IPPackHeadLen) into v_UpTransContentLens from sh_gprsmdttransinfo where (issuccess = ''''1'''') and (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;
        if (v_UpContentLens is null) then
          v_UpContentLens := 0;
        end if;       
        if (v_UpTransContentLens is null) then
          v_UpTransContentLens := 0;
        end if;       
        v_UpTotalLens := v_UpTotalLens + v_UpContentLens + v_UpTransContentLens;
       
        -- 下面的Select语句是用来获得服务商下发的信息流量
        select sum(length(content) + c_IPPackHeadLen) into v_DownContentLens from sh_gprsspdowninfo where (MDTID = v_MDTINFO) and (spid = v_SPINFO.spid) ;
        if (v_DownContentLens is null) then
          v_DownContentLens := 0;
        end if;
        v_DownTotalLens := v_DownTotalLens + v_DownContentLens ;

        -- 将统计出的累计值存放到流量状态统计表中       
        if (v_UpTotalLens >0) or (v_DownTotalLens > 0) then
          insert into sh_gprsstreamstat (statid,spid,mdtid,starttime,endtime,mdtupstream,spdownstream)
          values(newID,v_SPINFO.spid,v_MDTINFO,sysdate,sysdate,v_UpTotalLens,v_DownTotalLens);
          -- 自增量加1
           newID := newID + 1;                  
        end if;    
      end loop;    
      close c_MDTINFO;  
      commit;            
    end loop;
    return 1;
  end;

begin
  null;
end PSH_GPRSSTREAMSTAT;


[系统软件]如何在Linux系统上进行快速磁带备份  [C语言系列]如何在Jbuilder9中使用SQLServer JDBC驱动
[VB.NET程序]如何在Visual Basic 6.0 中连接加密的Access数据库  [VB.NET程序]如何在vb 中用api函数代替winsock控件建立网络连接…
[Delphi程序]如何在delphi6中调试web程序  [Delphi程序]如何在Delphi中用代码来完成计算字段的创建
[Delphi程序]如何在 Listbox 上显示 In-place Tooltips  [Delphi程序]如何在Delphi应用程序中调用CHM文档
[Delphi程序]如何在Delphi中使用正则表达式  [Delphi程序]如何在delphi下和.net建立的webservice 进行协同工…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台