程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle存儲過程的使用實例

Oracle存儲過程的使用實例

編輯:Oracle數據庫基礎

Oracle存儲過程對於Oracle數據庫中的重要性毋庸置疑,下面就為您介紹一個Oracle存儲過程的使用實例,希望對您學習Oracle存儲過程有更多的了解。

最近在寫一個項目中所用的Oracle存儲過程,由於是第一次接觸Oracle,其間花費了許多功夫,才把功能實現!特記錄下來,以供參考.

create or replace package PSH_GPRSSTREAMSTAT is

-- Author : ADMINISTRATOR

-- Created : 2004-12-8 10:56:01

-- Purpose : GPRS流量統計狀態

-- 統計GPRS流量

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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved