oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法
/*打开日志输出*/
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_stat
pipelined 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 ;
loop
exit 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_Cur
into 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 ;
Exception
when others then
Dbms_Output.put_line( Sqlerrm );
end f_linkgroupstat;
select * from table(f_linkgroupstat(1361980800,1362067200,'34','FLUX_DATA_2013_2_28')) a; 289 rows selected. Elapsed: 00:00:00.28
执行时间为:28ms
oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法的更多相关文章
- c语言进阶4-有返回值函数
一. 从函数返回 从函数返回就是返回语句的第一个主要用途.在程序中,有两种方法可以终止函数的执行,并返回到调用函数的位置.第一种方法是在函数体中,从第一句一直执行到最后一句,当所有语句 ...
- c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题
c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...
- go语言基础之有参有返回值函数的使用
1.有参有返回值函数的使用 示例1: package main //必须 import "fmt" //go官方推荐写法 func MaxAndMin(a, b int) (max ...
- Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...
- c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)
C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...
- C++获取Lua全局变量和执行Lua多参数多返回值函数
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- SpringMVC(二)返回值设置、数据在域中的保存与SpringMVC案例
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.返回值的设置 1.返回 String [1]返回 String 默认情况 @RequestMappi ...
- ASP.Net MVC 在ajax接收controller返回值为Json数据
首先,再次回忆一下ajax的标准用法:(这张图写的比较详细了)(转) 页面部分ajax代码: $.ajax({ url: "/Home/Login?account=&q ...
随机推荐
- Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据
用http传输二进制的数据时,需要将二进制做一下转化,例如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字123456,本来只有4个字节,但是转化成文本的"12 ...
- 2015第23周一SVN插件安装
之前想把eclipse(3.7)的SVN插件版本从1.8.x降到1.6.x,上午折腾了好久没弄好,先是尝试在线安装,按网上说的1.6.x的url安装不成功(可能是网络问题,下载不到资源),然后尝试下载 ...
- Android初学:联系创建Activity
public class Activity2 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState ...
- java动态代理和cglib动态代理
动态代理应用广泛,Spring,Struts等框架很多功能是通过动态代理,或者进一步封装来实现的. 常见的动态代理模式实现有Java API提供的动态代理和第三方开源类库CGLIB动态代理. Java ...
- tomcat线程数查看
获取tomcat进程pid ps -ef|grep tomcat 统计该tomcat进程内的线程个数 ps -Lf 29295 |wc -l
- oracle监听服务开启
输入命令netca即可开启oracle的监听服务 弹出对话框 选择监听服务配置,单击下一步 选择增加监听,单击下一步 监听的名字,默认即可,下一步 监听链接的协议,默认TCP协议即可,下一步 监听默认 ...
- 高可用集群(HA)配置
高可用集群(HA) 1. 准备工作 HA的心跳监测可以通过串口连接监测也可以通过网线监测,前者需要服务器有一个串口,后者需要有一个空闲网卡.HA架构中需要有一个共享的存储设备首先需要在两台机器上安装m ...
- datatable列操作
DataTable myDt =dt; //删除列 myDt.Columns.Remove("minArea"); myDt.Columns.Remove("max ...
- CSS 设计模式一 元素
1.background 内置 是一种CSS内置设计模式,支持在元素下显示图片 HTML <!DOCTYPE html> <html lang="en"> ...
- HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include &l ...