还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
[dzhl]create orreplace proceduresp kr ns hn mtv dtal[dzh2]iv_date invarchar2,oi__return outinteger/**head*@name masakr#sp kr ns hn mtv dtal*@caption河南手机电视专区日累计报表*@type日报表*@paramete门v_date invarchar2[dzh3]统计日期,格式yyyymmdd*@parameter oi_return outinteger执行状态码,0正常,其它出错*©description需求267536,作用河南手机电视专区日累计报表和日累计智能查询,运行时间120秒[dzh4]河南手机电视专区日累计报表河南*@target masakr#tb krns hnmtv dtal手机电视专区日累计智*@target masakr#tb krns hnmtv list dtal能查询*@source masadw#tb dwsu stmlist cur手机电视清单表用户日累计事实表*@source masamk#tb_mk_sc_user_dtaI*@middle masakr#tb krns hnmtv listdt tmp*@middle masakr#tb krns hnmtv listdt tmpl*©version
2.0*@author■张三*@create-date2009-08-24*@todo*Aversion*@mender*@modify_date*@modify_desc*@copyright**厂家河南移动*/*ISvi_task_id integer;-任务日志idvv_task_name varchar230;--任务名vv tablename varchar230--表名vv_task_sign varchar230;--任务标识vv_task_pos varchar250;--任务位置vi_err_code integer;-出错代码vv_err_msg varchar2200;-出错信息/**@description变量定义*/[dzh5]作者张三,过程sp krns hnmtv dtal;[dzhl5]create tabletb krns hnmtv listdt tmpas select*fromtb krns hnmtv list dtal where1=2;comment ontable masakr.tb krns hnmtv listdt tmpis”需求:267536,作用:河南手机电视专区日累计用户信息临时表,作者张三,过程sp_kr_ns_hn_mtv_dtal;[dzhl6]*//*前台位置数据>>系统资源>>数据业务深度运营>>业务监控>>战略型产品>>139邮箱>>业务发展>>121451139社区用户发展日报表*//*查日志脚本select*from masasys.tb_kr_sys_logwhere taskname=sp krns hnmtv dtalorder bystart_time desc*/[dzhl]更详细的要求(如命名、缩进、换行等)需参考编程规范,本文档只是从整体上进行演示[dzh2]要求编译是完全成功的,不得留有警告或者错误[dzh3]必须与实际定义完全一致[dzh4]必须按样例格式涵盖这3方面[dzh5]每个大程序块前用这个固定注释格式/**@description具体说明*/[dzh5]描述代码作用[dzh6]注意删除不需要的变量定义,否则会有提示性告警[dzh7]数据必须有周期控制,分区表要考虑DROP历史分区;报表类要删除过早的历史数据[dzh8]如无特殊要求,应将清除所有中间表的操作集中在一起,便于维护[dzh9]必须明确使用列表,不得出现insert intotb krns hnmtv listdt tmp[dzh9]select*from XXX的情况[dzhlO]用别名是个好习惯,即使只有一个表当多表关联时,别名是必须的![dzhll]报表补零有很多算法,由作者自己决定,样例是一种常见的方法[dzhl2]这个必须在COMMIT前执行[dzhl3]取消通知刷新函数执行失败向作者发短信的处理方式,改为报错后写日志,但是不要对数据区进行回滚[dzhl4]将以前在程序头部的几类附加信息统一调整到尾部,便于CTL+END一步定位注意必须按建表语句、前台位置、日志SQL的顺序书写[dzhl5]必须按这种格式写表注释[dzhl6]除非临时表与母表字根一致,否则必须按同样的COMMENT格式对临时/中间表加注释vi resultinteger;--临时结果exc returnexception;-程序中间返回自定义异常exc errorexception;--程序出错返回自定义异常varchar230;v owner-属主varchar230;v_proc_name-通知报表刷新的过程名version_date varchar28;-报表刷新的版本日期v_tz_flag vdinteger;--通知成功标志(0成功)date date;-统计日期--统计日月初第一vd_first_date date;[dzh6]begin/二@description允许并行处理三/execute immediatealter sessionenable paralleldml1;*©description变量初始化*/vv_task_name=sp krns hnmtv dtal;vv_table_name=tb krns hnmtv dtal;vddate:=vd_first_date:=to_dateiv_date;yyyymmdd;砍Mmdate「m但%asakr;v_proc_name:=sp krns hnmtv dtal,;version_date=iv_date;vv_task_sign=iv_date;@description程序开始日志vv_task_pos:=程序开始日志,;masasys.sp_kr__sysjogvi__taskjd,vv_task_name,vv_table_name,vv_task_sign,1,null,null,null;if iv_date isnull thenvi_err_code:=-1;vv_err_msg:=没有输入统计日期参数;raise exc_error;end if;vv_task_pos:=判断源数据源是否存在‘;select count*into vi__resultfrom masadw.tb dwsu stmlist curawhere a.deal_date=vd_dateand rownum=1;*/vv_task_pos:=检查输入参数;三@description参数以及数据源检查if vi_result=0thenvi_err_code:=-40000;vv errmsg:=数据源masadw.tb dwsu stmlist cur没有统计日数据;raise exc_error;end if;select count*into vi_resultfrom masamk.tb_mk_sc_user_dtal awhere a.statis_date=truncsysdate-land rownum=1;if vi_result=0thenvi_err_code:=-40001;vv_err_msg=数据源masamk.tb_mk_sc_user_dtal没有统计日数据,;raise exc_error;end if;/***©description报表处理开始*/vv_task_pos:=删除旧数据;delete from tb_kr_ns_hn_mtv_dtal wherestatis_date=vd_date;delete/*+parallela,4*/fromtb krns hnmtv listdtala wherestatis date=vd dateor statis_date=vd_date-3;[dzh7]commit;vv_task_pos=清除临时表数据,;[dzh8]execute immediatetruncate tabletb krns hnmtv listdt tmp;execute immediatetruncate tabletb krns hnmtv listdt tmpl;vv taskpos:二手机视频使用客户日累计数据;insert intotb krns hnmtv listdt tmp[dzh9]serv_number,--号码is_mf_cust-是否免费业务用户mf_use_count,--免费业务使用次数is_ac_cust-是否按次业务用户ac_use_count-按次业务使用次数is_by_cust一是否包月用户by_use_count,-包月业务使用次数total_sr--按次收入select/*+parallela,8*/a.serv_number,-一号码case when a.operation_code=20810000then1else Oend,--是否免费业务用户case when a.operation_code=20810000and a.play_duration0then1else0end,-免费业务使用次数case when a.operation_code=20820000then1else Oend,--是否按次业务用户case when a.operation_code=20820000and a.cdr_info_fee0then1else0end,--按次业务使用次数case whena.operation_code=10830000then1else Oend,--是否包月用户case whena.operation_code=10830000and a.play_duration0then1else0end,--包月业务使用次数case whena.operation_code=20820000then a.cdr_info_fee else0end--按次收入frommasadw.tb dwsu stmlist cura[dzhlO]where a.operation_code inlOSSOOOO^^OSlOOOO,20820000and a.deal_date betweenvd_first_date andvd_date;commit;vv_task_pos:=汇总手机视频使用客户数日累计明细数据,;insert intotb krns hnmtv listdtal--统计日期statis_dateserv_number--号码area__code--地区编码area_name-归属地市公司is_mf_cust--是否免费业务用户mf_use_count-免费业务使用次数is_ac_cust--是否按次业务用户ac_use_count-按次业务使用次is_by_custby_use_count--包月业务使用次数--是否包月用户total_srselect/*+parallelc,8parallela,4*/厂统计日期vd_date号码a.serv number厂-地区编码b.area codemaxtrimb.area_code_name厂-归属地市公司maxnvla.is_mf__cust,O是否免费业务用户sumnvla.mf_use_count,0,免费业务使用次数maxnvla.is_ac_cust;O是否按次业务用户sumnvla.ac__use_count,0,一按次业务使用次数maxnvla.is_by_cust;O,--是否包月用户sumnvla.by_use_count,0,一包月业务使用次数case whenmaxnvla.is__by_cust,O=T thensumnvla.total_sr,0/100+10elsesumnvla.total_sr,0/100end--总收入from masamk.tb mksc userdtal c,tb krns hnmtv listdt tmpa,masadw.tb__dic_area_code bwheretrimc.area_code=trimb.area_codeand a.serv_number=c.serv_numberand c.user_statusjdHand c.statis_date=truncsysdate-2group bya.serv_number,--号码b.area_code;commit;vv_task__pos:=汇总报表数据;insert intotb krns hnmtv dtal--省权-地区名称area_provarea_desc-区号area codemf_cust_count-免费业务用户数mf_use__count-免费业务使用次数ac cust_count--按次业务用户数ac usecount-按次业务使用次数ac_sr-按次业务收入by__cust_count--包月业务用户数by_use_count-包月业务使用次数by_sr-包月业务收入total_cust_count total_sr一总用户数-总收入selectvd_date,-1,case whengroupingtrima.area_code=l then全省else maxb.area_code_nameend,decodegroupingtrima.area_code,1,Z,trima.area_code area_code,countdistinct casewhena.is_mf_cust=*1then a.serv_number end,--免费业务用户数suma.mf_use_count,--免费业务使用次数countdistinct casewhena.is_ac_cust=1then a.serv_number end,--按次业务用户数suma.ac_use_count,-按次业务使用次数sumcase whena.is_ac_cust=T and a.is_by_cust1then a.total_srwhen a.is_ac_cust=1and a.is_by_cust=1*then a.total_sr-10else0end,--按次业务收入countdistinct casewhena.is_by_cust=*1then a.serv_number end,一包月业务用户数suma.by_use_count,—包月业务使用次数countdistinct casewhena.is_by_cust=1then a.serv_number end*10,一包月业务收入countdistinct a.serv_number,一总用户数suma.total__srfrom tb krns hnmtv listdtala,masadw.tb diearea code bwhere trima.area_code=trimb.area_code+anda.statis_date=vd_dategroup byrolluptrima.area_code;vv_task_pos=分公司级补0,为报表刷新做准备,;[dzhll]insert intotb_kr_ns_hn_mtv_dtalstatis_date,area_prov,--省权area_desc,--地区名称area_code.--区号mf_cust_count.--免费业务用户数mf_use_count,--免费业务使用次数ac_cust_count,--按次业务用户数ac_sr--按次业务收入by_cust_count-包月业务用户数by_use_count-包月业务使用次数by_sr--包月业务收入total_cust_count--总用户数totalsr--总收入ac usecount,--按次业务使用次select vd_date,-1,aa.areaaa.area0,0,_code_name,0,_code,0,0,0,0,0,0,0from selectb.area_code,b.area_code_namefrom tb_kr_ns_hn_mtv_dtaI a,masadw.tb_dic_area_codebwherea.area_code+=b.area_code anda.area_code isnull anda.statis_date+=vd_dateaa;/**@description得到数据量*/vi_result:=sql%rowcount;[dzhl2]commit;/***@description报表处理结束*/vv_task_pos:=清除临时表数据execute immediatetruncate tabletb krns hnmtv listdt tmp;execute immediatetruncate tabletb krns hnmtv listdt tmpl,;vv_task_pos:=通知刷新报表,;v_tz_flag:=masasys.fun_bi_rpt_reflashjogv_owner,v_proc_name,version_date;[dzhl3]if v_tz_flag0thenvi_err_code:=-1;vv_err_msg:=通知刷新函数返回错误’;raise exc_error;end if;/***@description程序运行完成,记录程序结束日志,正常返回*/vv_task_pos:=程序结束日志,;masasys.sp_kr__sysjogvi_taskjd,null,null,null,0,null,null,vi_result;oi_return:=0;exceptionwhen exc_return then/**@description程序中间返回,记录程序结束日志,正常返回*/masasys.sp_kr_sys_logvi_taskjd,null,null,null,0,null,vv_task_pos,vi_result;oi_return:=0;when exc__error then/**@description程序出错返回自定义异常,记录程序出错日志,出错返回*/rollback;masasys.sp_kr_sysjogvi_taskjd,null,null,null,vi_err_code,vv_err_msg,vv_task_pos,vi_result;oi_return:=vi_err_code;when othersthen/**@description程序出错,得到出错信息,回滚事务,记录程序出错日志,出错返回*/vi_err_code:=sqlcode;vv_err_msg:=substrsqlerrm,1,200;rollback;masasys.sp_kr_sysjogvi_taskjd,null,null,null,vi_err_code,vv_err_msg,vv_task_pos,vi_result;oi return:=vi errcode;/**©description以下是程序附加信息*/[dzhl4]/*建表语句-51krstatis_date date,char2,area_prov varchar264,-省权area_desc char5,integer,--地区名称area_code integer,integer,--区号mf_cust_count integer,--免费业务用户数mf_use_count number,-免费业务使用次数ac_cust_count integer,integer,-按次业务用户数ac_use_count-按次业务使用次数ac_sr--按次业务收入by__cust_count-包月业务用户数by_use_count-包月业务使用次数create tabletb krns hnmtv dtalby_sr number,-包月业务收入total_cust__co-总用户数statis_dateunt integer,-总收入serv_numbertotal_sr numberarea_code;area_namecomment ontable masakr.tb krns hnmtv dtal is”需求:267536,is_mf_cust作用河南手机电视专区一一日累计报表,作mf__use_count者张三,过程sp krns hnmtv dtal”;is_ac_custac_use_countis_by_custby_use_counttotal_srtablespacecreate tabletbkrnshnmtvlistdtaldate,charll,--号码char5,varchar250,--归属地市公司charl,一是否免费业务用户integer,-免费业务使用次数charl,-是否按次业务用户integer,--按次业务使用次数charl,-是否包月用户integer,--包月业务使用次数number一总收入comment ontable masakr.tbkrnshnmtvlistdtalis”需求:267536,作用河南手机电视专区日累计用户信息,。