请帮我解释一下这两段程序,用oracle语言写的,不是太长。注释得好的加50分。

请帮我解释一下这两段程序,用oracle语言写的,与网络流量分析有关。帮我注释一下,我对oracle语言一无所知。老师让我把这两段程序改成在Hadoop云计算平台上跑的程... 请帮我解释一下这两段程序,用oracle语言写的,与网络流量分析有关。帮我注释一下,我对oracle语言一无所知。老师让我把这两段程序改成在Hadoop云计算平台上跑的程序。
现在需要帮这两段oracle语言的程序读懂,实现什么样的功能,入口参数,出口参数是什么,最好能逐句注释,因为我真的一点也不懂oracle语言

程序如下
程序1 pro_flow

create or replace procedure pro_flow is
begin

insert into table_flow (STREAM_ID,start_time,number_packets)
select stream_idid,min(timetag),count(timetag)
from
(SELECT SUM(flag) OVER(PARTITION BY IP_PROTO,IP_SRC,IP_DST,S_PORT,D_PORT ORDER BY TIMETAG) stream_idid,timetag,IP_PROTO,IP_SRC,IP_DST,S_PORT,D_PORT

FROM (SELECT timetag,IP_PROTO,IP_SRC,IP_DST,S_PORT,D_PORT
,CASE WHEN TIMETAG - LAG(TIMETAG) OVER(PARTITION BY IP_PROTO,IP_SRC,IP_DST,S_PORT,D_PORT ORDER BY TIMETAG) <= INTERVAL '60' SECOND THEN 0 ELSE 1 END flag
FROM table_temp_kk t
where timetag <to_timestamp('2011-09-22 12:00:00.000000000')

)
)
group by IP_PROTO,IP_SRC,IP_DST,S_PORT,D_PORT, stream_idid;

end pro_flow;
/

程序2 pro_flow_loop

create or replace procedure pro_flow_loop is
flow_count number(20);
flow_packet_count number(20);
i_count number(8):=0;

begin

loop
select count(start_time),sum(number_packets) into flow_count,flow_packet_count from table_flow where timetag between to_timestamp('2011-09-22 00:00:00.000000000')+ numtodsinterval(1,'minute')*i_count and to_timestamp('2011-10-09 00:01:00.000000000')+numtodsinterval(1,'minute')*i_count ;
i_count:=i_count+1;
DBMS_OUTPUT.PUT_LINE(i_count||','||flow_count||' , '||flow_packet_coun);
If i_count>1439 then
Exit;
end if;
end loop;

end pro_flow_loop;
/
展开
 我来答
擅长数据库育儿
2012-06-21 · TA获得超过278个赞
知道小有建树答主
回答量:82
采纳率:33%
帮助的人:54.6万
展开全部
--程序1主要是创建一个存储过程,内容是将查询的内容插入到表table_flow中
/* 首先
"create or replace procedure 存储过程名字 is
begin
…………
end 存储过程名字;
/"
以上引号内是存储过程的基本形式*/
--我们主要看里面这段程序的意思
create or replace procedure pro_flow is
begin
--以下程序分为两部分
insert into table_flow (STREAM_ID,start_time,number_packets)--意思是为table_flow的三个字段插入数据,那么插入哪些数据呢?这些数据就是依赖与下面那一大段select语句的查询结果

select stream_idid, min(timetag), count(timetag) --从这句我们可以看到,最外层的select也是三个字段,最终插入到表table_flow中的数据就是这部分select的内容
from (SELECT SUM(flag) OVER(PARTITION BY IP_PROTO, IP_SRC, IP_DST, S_PORT, D_PORT ORDER BY TIMETAG) stream_idid,
timetag,
IP_PROTO,
IP_SRC,
IP_DST,
S_PORT,
D_PORT
FROM (SELECT timetag,
IP_PROTO,
IP_SRC,
IP_DST,
S_PORT,
D_PORT,
CASE
WHEN TIMETAG - LAG(TIMETAG)
OVER(PARTITION BY IP_PROTO,
IP_SRC,
IP_DST,
S_PORT,
D_PORT ORDER BY TIMETAG) <= INTERVAL '60'
SECOND THEN
0
ELSE
1
END flag
FROM table_temp_kk t
where timetag <
to_timestamp('2011-09-22 12:00:00.000000000')
))--sql语句你能看懂的不?这后面一长段就是为了形成一个所需要内容的表
group by IP_PROTO, IP_SRC, IP_DST, S_PORT, D_PORT, stream_idid;

end pro_flow;
/

--程序2中pro_flow_loop其实也是一个存储过程,它的意思是通过游标来实现一个循环显示,游标就类似于程序设计语言中的指针(loop是循环标志),很简单的,除了存储过程的格式,其实其它都是sql语句的拼接

create or replace procedure pro_flow_loop is
flow_count number(20);
flow_packet_count number(20);
i_count number(8):=0;

begin

loop
select count(start_time),sum(number_packets) into flow_count,flow_packet_count from table_flow where timetag between to_timestamp('2011-09-22 00:00:00.000000000')+ numtodsinterval(1,'minute')*i_count and to_timestamp('2011-10-09 00:01:00.000000000')+numtodsinterval(1,'minute')*i_count ;
i_count:=i_count+1;
DBMS_OUTPUT.PUT_LINE(i_count||','||flow_count||' , '||flow_packet_coun);
If i_count>1439 then
Exit;
end if;
end loop;

end pro_flow_loop;
/
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式