近期需要一个汇总统计,由于数据太多,数据量太大所以在java程序中实现比较困难。若用后台程序统计,数据不能保证实时,同时实现周期比较长。顾使用函数返回结果集的方式,在不增加临时表的情况下实时获取数据。需求为:多个端口流量每五分钟累计汇总一次。如果用程序实现则为讲所有数据取出做每五分钟统计,元数据获取带来的数据量将是10万条以上。
在数据库中做汇总统计只需要24*12=288条记录。
具体实现方式如下:
/*打开日志输出*/Set serveroutput on ;/*创建类型*/create or replace type type_flux_data_stat_o as object(ifinoctetsbps number ,ifoutoctetsbps number ,collecttime number);/*创建类型归属为表类型*/create or replace type type_flux_data_stat as table of type_flux_data_stat_o;/*pipelined创建函数 返回表类型*/create or replace FUNCTION f_linkgroupstat(begin_time IN NUMBER,end_time IN NUMBER,lg_id in varchar2,table_name varchar2 )return type_flux_data_statpipelined as/*游标申明*/v_Cur SYS_REFCURSOR ;/*sql临时变量*/v_SQLStatement string (10000 );/*表类型*/v_Table type_flux_data_stat_o;/*流入字节数临时变量*/tmp_ifinoctetsbps NUMBER ;/*流出字节数临时变量*/tmp_ifoutoctetsbps NUMBER ;/*流入字节数汇总*/total_ifinoctetsbps NUMBER ;/*流出字节数汇总*/total_ifoutoctetsbps NUMBER ;/*起始时间窗格*/tmp_begin_time NUMBER ;/*结束时间窗格*/tmp_end_time NUMBER ;begin/*时间窗格偏移量为5分钟(300秒)*/tmp_begin_time := begin_time;tmp_end_time := begin_time + 300 ;total_ifinoctetsbps := 0 ;total_ifoutoctetsbps := 0 ;loopexit when tmp_begin_time > end_time;v_SQLStatement := 'select sum(ifinoctetsbps) ifinoctetsbps,sum(ifoutoctetsbps) ifoutoctetsbps from ' ||table_name ||' a where exists (select 1 from tm_linkgroup_cportdirection b where a.getway = b.getway and a.port_info=b.ifindex_info and lg_id in (' ||lg_id ||') and a.device_id = b.device_id ) and a.collecttime >=' ||tmp_begin_time || ' and a.collecttime <=' ||tmp_end_time || ' order by collecttime' ;Dbms_Output.put_line(v_SQLStatement);/*针对字符串sql打开游标*/open v_Cur for v_SQLStatement;tmp_begin_time := tmp_begin_time + 300 ;tmp_end_time := tmp_end_time + 300 ;total_ifinoctetsbps := 0 ;total_ifoutoctetsbps := 0 ;loop/*将游标的值放入零食变量中*/fetch v_Curinto tmp_ifinoctetsbps, tmp_ifoutoctetsbps;/*当游标中不存在值时跳出游标*/EXIT WHEN v_Cur% NOTFOUND;total_ifinoctetsbps := total_ifinoctetsbps + tmp_ifinoctetsbps;
total_ifoutoctetsbps := total_ifoutoctetsbps + tmp_ifoutoctetsbps;end loop ;/*单行记录初始化*/v_Table := type_flux_data_stat_o(total_ifinoctetsbps,total_ifoutoctetsbps,tmp_begin_time);/*将记录压入至结果集中*/pipe row (v_Table);/*关闭游标*/close v_Cur;end loop ;Exceptionwhen others thenDbms_Output.put_line( Sqlerrm );end f_linkgroupstat;

使用方法为table(方法)作为表查询方式,其间没有临时表,形如:
select * from table(f_linkgroupstat(1361980800,1362067200,'34','FLUX_DATA_2013_2_28')) a;289 rows selected.Elapsed: 00:00:00.28

执行时间为:28ms

转载于:https://www.cnblogs.com/sesexxoo/p/6190596.html

oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法相关推荐

  1. 119.编写函数,该函数的功能是计算下列级数之和,和值返回调用函数,数据由主函数输入

    计算下列级数之和 题目:编写函数,该函数的功能是计算下列级数之和,和值返回调用函数,数据由主函数输入 效果 讲解 代码 题目:编写函数,该函数的功能是计算下列级数之和,和值返回调用函数,数据由主函数输 ...

  2. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...

  3. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  4. 【C 语言】字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )

    文章目录 一.字符串翻转模型 业务函数 二.完整代码示例 一.字符串翻转模型 业务函数 将上一篇博客 [C 语言]字符串模型 ( 字符串翻转模型 ) 的代码 , 主要业务逻辑 , 抽象成函数 ; 字符 ...

  5. 【C 语言】字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )

    文章目录 一.将 两头堵模型 抽象成业务模块函数 二.完整代码示例 一.将 两头堵模型 抽象成业务模块函数 将 两头堵模型 抽象成业务模块函数 相关要点 : 形参返回值 : 函数的返回值 , 一般使用 ...

  6. 返回值类型与函数类型不匹配_C++返回值类型后置(跟踪返回值类型)

    在泛型编程中,可能需要通过参数的运算来得到返回值的类型.考虑下面这个场景: template <typename R, typename T, typename U>R add(T t, ...

  7. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题

    c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...

  8. keil5函数 默认返回值_python实用技巧——获取部分返回值的4种方式

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全 ...

  9. MATLAB中如何忽略函数中前几个不需要的返回值而只取需要的返回值,例如:只取函数第二个返回值,而忽略第一个返回值

    1 致谢 感谢网友honglei.chen的回答, 原文链接如下: https://www.ilovematlab.cn/thread-203269-1-1.html 2 前言 今天在学习神经网络算法 ...

最新文章

  1. ajax 阻止默认提交,jQuery验证插件:在对ajax调用servlet时,submitHandler不会阻止默认提交-返回false无效...
  2. 深入跨域问题(2) - 利用 CORS 解决跨域
  3. 使用纯 Win32 API 编程实现Winpcap 封包捕获的第一个例子
  4. 浪潮服务器更换硬盘_总金额2.5亿!浪潮信息助力中国移动部署NFV项目
  5. F#基础教程 列表
  6. C#调用VB进行简繁转换
  7. JavaScript-作用域和作用域链
  8. docker核心视频教程
  9. winform直接控制云台_售价899元,大疆手机云台DJI OM 4发布,磁吸式卡位 15小时续航...
  10. Eclipse配置GitHub代码库(以Windows7为例)
  11. 华三路由交换配置命令_华三华为交换机路由器配置常用命令
  12. Image caption领域的研究现状及分析
  13. 外交部官员回应中国免签国都是穷乱国:需要时间
  14. centos 6.8 请教笔记本上的虚拟机如何配置无线网络 桥接联网
  15. 键盘哪个键是锁定计算机,键盘锁是哪个键 锁键盘的是哪个键 - 云骑士一键重装系统...
  16. mysql级联更新_Mysql实现级联操作(级联更新、级联删除)(转)
  17. 灵活使用手机之-手机服务器和客户端
  18. 原始混合合成器:Arturia Analog Lab for Mac
  19. SWUST OJ#1052 输出利用先序遍历创建的二叉树中的指定结点的双亲结点
  20. vmware workstation虚拟机连接外网(Nat模式)

热门文章

  1. 5G NR QCL准共址详解
  2. 批量绑定(bulk binds):FOR循环与FORALL的性能比较
  3. SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)
  4. Hibernate依赖包简单介绍
  5. 【bzoj4372】烁烁的游戏 动态点分治+线段树
  6. python pep8
  7. 信息安全系统设计基础第八周学习总结
  8. JavaScript 本地验证用户注册信息
  9. 中国建设银行(2011.11.19南京大学)
  10. Docker与CI持续集成/CD(转)