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 ...
随机推荐
- 深入浅出Node.js (8) - 构建Web应用
8.1 基础功能 8.1.1 请求方法 8.1.2 路径解析 8.1.3 查询字符串 8.1.4 Cookie 8.1.5 Session 8.1.6 缓存 8.1.7 Basic认证 8.2 数据上 ...
- c++命名空间using
#include<iostream> namespace run1 { ; } namespace run2 { ; void show() { std::cout << x ...
- Hadoop 2、配置HDFS HA (高可用)
前提条件 先搭建 http://www.cnblogs.com/raphael5200/p/5152004.html 的环境,然后在其基础上进行修改 一.安装Zookeeper 由于环境有限,所以在仅 ...
- JavaScript学习总结(二)
JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...
- ViewPager实现页卡的3种方法(谷歌组件)
----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...
- Hexo博客搭建图文教程
准备 你需要准备好以下软件: Node.js环境 Git Windows 配置Node.js环境 下载Node.js安装文件: Windows Installer 32-bit Windows Ins ...
- Android的TextView使用Html来处理图片显示、字体样式、超链接等
一.[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html import android. ...
- Linux系统相关
1. 图形界面启动的是哪个运行级别? 而我们平时用的命令行模式又是哪个运行级别? 除了图形和命令行模式两个常用级别外,其他运行级别代表什么涵义?如何更改系统的运行级别?图形界面启动的是5级别,命令行模 ...
- Web App 前端构建(纯净版)
asp.net 母版页: <!DOCTYPE html> <html> <head> <meta charset="utf-8" name ...
- 注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
应加: <form id="form1" runat="server"> </form> 否则一开始什么也不显示,页面控件看不见,加上a ...