CREATE OR REPLACE FUNCTION sig_qry_rpt.p_ipv6_host_analsys(in_date timestamp without time zone)
RETURNS void
LANGUAGE plpgsql
NOT FENCED NOT SHIPPABLE
AS $$ DECLARE
part_num number;
part_value number;
tab_num number;
part_name varchar2(100);
tablename varchar2(100);
v_sql text;
ts text;
error_msg text;
start_time date;
r_count number;
begin
select to_char(EXTRACT(epoch from trunc(in_date)::timestamp with time zone)) into ts;
tablename := 't_ipv6_host_analsys';
select count(*) into tab_num from user_tables where table_name = tablename;
if tab_num = 0 then
v_sql := 'CREATE TABLE if not exists sig_qry_rpt.t_ipv6_host_analsys(
stat_date varchar(800),
protocol_name text,
host text,
alluser_ipv6_traffic varchar(800),
alluser_all_traffic varchar(800),
ipv6user_ipv6_traffic varchar(800),
ipv6user_all_traffic varchar(800),
fttruser_ipv6_traffic varchar(800),
fttruser_all_traffic varchar(800)
);';
execute immediate v_sql;
end if;
insert into sig_qry_rpt.t_ipv6_host_analsys(
stat_date,
protocol_name,
host,
alluser_ipv6_traffic,
alluser_all_traffic,
ipv6user_ipv6_traffic,
ipv6user_all_traffic,
fttruser_ipv6_traffic,
fttruser_all_traffic
)
with t1308_tmp as ( /*基础表:1308表单天数据*/
select
*
from
sig_qry_rpt.t1308_user_http_detail_h
where
export_time = ts and left(stat_date,10)=left (in_date,10)
),
standard_app_host_traffic as ( /*中间表:标准格式的host所对应的流量数据*/
select
left(stat_date,10) as stat_date,
app_name,
a.host,
account,
sum(case when left(serverip,3)='240' then nvl(outputoctets,0)+nvl(inputoctets,0) else 0 end )/1024/1024 as ipv6_traffic,
sum(case when left(serverip,3)!='240' then nvl(outputoctets,0)+nvl(inputoctets,0) else 0 end )/1024/1024 as ipv4_traffic,
ipv6_traffic+ipv4_traffic as all_traffic
from t1308_tmp a
join sig_qry_rpt.t_app_host_list b on a.host= b.host
group by 1,2,3,4
),
no_standard_app_host_traffic as ( /*中间表:非标准格式的host所对应的流量数据*/
select
left(stat_date,10)as stat_date,
case
when host like '%video.qq.com' or host like '%wxqcloud.qq.com' or host like '%wxlivecdn.com' then '微信'
when (host like '%pinduoduo.com' or host like '%pddpic.com' or host like '%fanuchdf.com' or host like '%yangkeduo.com' or host like '%pddugc.com') then '拼多多'
when (host like '%sohu.com' or host like '%itc.cn' or host like '%sohucs.com' or host like '%sohu.com.cn' or host like '%sohu.cn' or host like '%qf.com.cn' or host like '%56.com' or host like '%56imgs.com' or host like '%56img.com' or host like '%v-56.com' or host like '%qianfan.tv') then '搜狐视频'
end as app_name,
host,
account,
sum(case when left(serverip,3)='240' then nvl(outputoctets,0)+nvl(inputoctets,0) else 0 end)/1024/1024 as ipv6_traffic,
sum(case when left(serverip,3)!='240' then nvl(outputoctets,0)+nvl(inputoctets,0) else 0 end)/1024/1024 as ipv4_traffic,
ipv6_traffic+ipv4_traffic as all_traffic
from
t1308_tmp
where
host like '%video.qq.com' or host like '%wxqcloud.qq.com' or host like '%wxlivecdn.com' or host like '%pinduoduo.com' or host like '%pddpic.com' or host like '%fanuchdf.com' or host like '%yangkeduo.com' or host like '%pddugc.com' or host like '%sohu.com' or host like '%itc.cn' or host like '%sohucs.com' or host like '%sohu.com.cn' or host like '%sohu.cn' or host like '%qf.com.cn' or host like '%56.com' or host like '%56imgs.com' or host like '%56img.com' or host like '%v-56.com' or host like '%qianfan.tv'
group by 1,2,3,4
)
--fttr用户列表(根据设备提取)移动局点适用(不统计FTTR用户/电联局点,可注掉到下一个注释间的内容)
--,fttr_user_list as (
--select
-- date_time,account,onu_model
--from
-- sig_qry_rpt.t_user_homenetwork_d
--where
-- export_time=ts
-- and onu_model in ('SK-FH849','SK-FH849L','HG3142F(ONU)','HG3145F','HG3142F','HG3142F1','HN8145XR','V173','V173-50','V176-20','V175','V271-20','COMHEART TY-F802G','TFM-8661A2','ZN-AX172G','F7607P','G6615','G6611','G7611','G7611V2','G7615','G7615A','G7615AV5','G7715V5','CMGII-2200','HX6-FM1','HX5-FM1Pro')
-- group by 1,2,3
--)
--非移动局点,需注释掉以上内容
--fttr用户(根据用户表提取提取)电联局点适用(电联局点,需将‘fttr用户表’替换为前期导入的fttr用户表表名)
,fttr_user_list as (select account from account_20250401 )
--非电联局点,需注释掉以上内容
select
stat_date,
app_name as protocol_name,
host,
sum(nvl(ipv6_traffic,0)) as alluser_ipv6_traffic,
sum(nvl(all_traffic,0)) as alluser_all_traffic
,sum(case when bb.account is not null then nvl(ipv6_traffic,0) else 0 end) as ipv6user_ipv6_traffic,/*不统计双栈用户,可注掉这两行*/
sum(case when bb.account is not null then nvl(all_traffic,0) else 0 end) as ipv6user_all_traffic /*不统计双栈用户,可注掉这两行*/
,sum(case when cc.account is not null then nvl(ipv6_traffic,0) else 0 end) as fttruser_ipv6_traffic,/*不统计FTTR用户,可注掉这两行*/
sum(case when cc.account is not null then nvl(all_traffic,0) else 0 end) as fttruser_all_traffic/*不统计FTTR用户,可注掉这两行*/
from
(
select
stat_date,app_name,host,account,ipv6_traffic,ipv4_traffic,all_traffic
from no_standard_app_host_traffic
union all
select
stat_date,app_name,host,account,ipv6_traffic,ipv4_traffic,all_traffic
from standard_app_host_traffic
)aa
left join sig_qry_rpt.t_support_ipv6_user_list bb on aa.stat_date = bb.date_time and aa.account = bb.account /*统计双栈用户数据,无需统计的局点可自行注释掉*/
left join fttr_user_list cc on aa.account = cc.account /*统计FTTR用户数据,无需统计的局点可自行注释掉*/
group by 1,2,3;
-----记录执行时间、数据量等信息-----
get diagnostics r_count = row_count;
insert into sig_qry_rpt.t_job_work_info
(stat_date,job_name,status,start_time,end_time,duration,cycle,data_time,data_volume)
values (to_char(start_time,'yyyy-mm-dd'),'p_ipv6_host_analsys',0,to_char(start_time,'yyyy-mm-dd HH24:mi:ss'),to_char(sysdate,'yyyy-mm-dd HH24:mi:ss'),EXTRACT(epoch from (sysdate-start_time)),'daily',to_char(in_date,'yyyy-MM-dd'),r_count);
exception
when others then
raise notice 'SQL ERROR:%',SQLERRM;
error_msg=SQLERRM;
insert into sig_qry_rpt.t_job_work_info
(stat_date,job_name,status,start_time,end_time,duration,cycle,data_time,error_msg)
values (to_char(start_time,'yyyy-mm-dd'),'p_ipv6_host_analsys',1,to_char(start_time,'yyyy-mm-dd HH24:mi:ss'),to_char(sysdate,'yyyy-mm-dd HH24:mi:ss'),EXTRACT(epoch from (sysdate-start_time)),'daily',to_char(in_date,'yyyy-MM-dd'),error_msg);
end $$
/
为什么这个表没有创建成功啊