1. 程式人生 > >oracle pipelined返回值函式 針對資料彙總統計 返回結果集方法

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;
 

相關推薦

oracle pipelined返回函式 針對資料彙總統計 返回結果方法

/*開啟日誌輸出*/ Set serveroutput on ; /*建立型別*/ create or replace type type_flux_data_stat_o as object ( ifinoctetsbps number , ifoutoctetsbps number

檔案內指標的移動,函式的基本使用,函式返回,函式引數的使用

強調:只有t模式下read(n),n代表字元個數,除此以外都是以位元組為單位with open('a.txt',mode='rt',encoding='utf-8') as f: res=f.read(4) print(res)with open('a.txt',mode='rb') as f:

JQuery應用例項學習 —— 28 處理json返回,點擊出現後臺返回資料

27.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

【Swift4】(5) 函式基本使用 | 可變引數 | inout引用傳遞 | 函式型別返回 | 函式巢狀

函式基本使用 關鍵字:func func hello(name:String) ->String { let result = "Hello,"+name return res

只要函式返回,遮蔽echo var_dump等輸出結果。php ob 解決

有時候,會訪問一個函式,這個函式有輸出,如果呼叫這個函式就會輸出,譬如: public function ee(){ echo 333; return 444; } public function run(){ echo $this->ee(); } 上面的

【C++】C++ 多返回函式

在一些複雜的應用中,使用多返回值的函式更加方便。從使用一個結構體到採用c++ 11新特性tuple類模板,在c++中有多種方式實現這一需要。 通過返回一個物件來實現多返回值函式,這個方案比較直觀,但在很多情況下有些小題大做了。首先,你必須去宣告一個結構體。結構體常常要對使

Oracle 11g使用Pivot函式實現資料聚合行轉列

經常使用資料庫,我們有很大的精力應付在處理各種各樣的資料型別,處理各種型別的報表。需要對資料進行行列轉換,Oracle 11G 提供了pivot函式,方便我們對資料進行行列轉換。 表設計如下: create table tongji( id number primary

返回為基本資料型別返回null報空指標異常

顯然,null並不能作為基本資料型別的值,int a = null;這句程式碼編譯都過不了,如果返回值為null的話就會嘗試將null強轉為基本資料型別,此時就會報空指標異常。但是對於其包裝型別就不存在這個問題了,給包裝型別返回null是合理的,因為Integer a = n

已定義的函式返回,函式呼叫可以作為一個函式的實參,但是不能作為形參

1、問題描述 若已定義的函式有返回值,則以下關於該函式呼叫的敘述中錯誤的是( D  )  A)函式呼叫可以作為獨立的語句存在  B)函式呼叫可以作為一個函式的實參  C)函式呼叫可以出現在表示式中 

java多執行緒 demo ,包含帶返回的Callable和不帶返回的Runnable

輸入int,利用callable取得double值,再用runnable列印 import java.util.concurrent.*; public class TestMultiThread { private static ExecutorService pool = nul

ORACLE 查詢多行轉單行資料,並且用逗號分隔展示方法

oracle 10g或以上 一個wm_concat函式就可以解決。 如果是oracle 9i以下就有點麻煩了。 表結構如下: NAME                            Null           Type ----------------------

Oracle Union Union All Intersect Minus 4種對查詢結果操作

Oracle Union Union All 對查詢結果集操作 在Oracle中提供了三種類型的集合操作: 並(UNION)、交(INTERSECT)、差(MINUS) Union:對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序; Union All:對兩個結果集進行並集

ORACLE隨機從表中取一條資料作為函式返回

需求是這樣的:有一張經緯度表,需要從中隨機取一條資料插入另一張表作為其中的兩個欄位。插入過程在儲存過程中,所以需要函式返回值為經緯度資料物件。 首先,生成返回值物件POINT_OBJECT,包括經度緯度。 --生成經緯度 CREATE OR REPLACE TYPE POINT_OBJECT AS OB

oracle中null相關函式彙總

nvl 最常用的函式。它接收兩個引數。返回第一個非空值。若兩個引數都為空,返回null。 例: select nvl(null, 9695) from dual; --9695 select nvl(123, null) from dual; --123 selec

oracle的dense_rank函式,實現分組後組內排序,取最一組資料

1.按VESSEL_CD, SYEAR, SMonth進行分組,組內資料按SENDDATE排序。 select VESSEL_CD, SYEAR, SMonth, to_char(SENDDATE, 'yyyy-mm-dd hh24

Oracle decode()函式返回問題

今天碰到一個問題,說min函式返回錯誤的取值。詳細如下:一個數據表列型別為number(6,2),其中有三行記錄,分別為0,0.6和1。用min獲取最小值,得到0.6。 min是Oracle SQL的一個基礎函式,理論上不會出現這樣的Bug之類的。下面一起來模擬下實驗環

oracle接收函式返回的三種形式

先建立一個函式吧,如下: Sql程式碼  createorreplacefunction get_user return varchar2 is v_user varchar2(100); 

Oracle 利用管道函式pipelined)實現高效能大資料處理

引言 在plsql開發中,會涉及到一些大資料量表的資料處理,如將某記錄數超億的表的記錄經過處理轉換插入到另外一張或幾張表。 常規的操作方法固然可以實現,但時間、磁碟IO、redo日誌等等都非常大。Oracle 提供了一種高階函式,可以將這種資料處理的效能提升

Ajax函式內呼叫非同步方法資料,無法及時獲取到賦返回 || 不使用快取結果

js預設是非同步的,比如下載3張圖片,你點選產生這個指令,但圖片下載完可能是2秒之後,“下載完成”的提示訊息也是在之後傳送給你,相當於多執行緒 也就是你寫了個函式,在裡面請求一組資料,並嘗試返回值,可能你函式走完了,請求的資料才拿到 比如: 解決方法: 用

Oraclepipelined函式提升資料輸出效能

        從Oracle 8開始,我們就可以從一個collection型別的資料集合中查詢出資料,這個集合稱之為“虛擬表“。它的方法是“SELECT FROM TABLE(CAST(plsql_function AS collection_type))”,據說該方