赞
踩
--第一种:正常的存储
CREATE OR REPLACE PROCEDURE CDP_PRO_TRUC_XXXX(v_date IN String)
is
--声明变量
v_pro_name String
v_sql String
v_step int
error_meg String
begin
---v_date yyyy-mm-dd
---业务模块:XXXXXXX
---开发日期:2020-04-21
---开发人:XXXXX
--如果需要给变量赋初始值
v_step := 0;
v_pro_name := 'CDP_PRO_TRUC_XXXX';
v_date := replace(v_date,'-','');
--手动判断源表
IF (V_STEP = 0) THEN
CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
--0.1 取来源表和结果表的最大日期
select to_char(date(max(txdate)),'yyyy-mm-dd') into person_base_date from jyt_t_personal_base_info; -- 2021-07-07
select to_char(max(txdate),'yyyy-mm-dd') into base_info_date from ndata.CMT_EBC_BASE_INFO; -- 基本信息表 2021-07-08
select to_char(max(txdate),'yyyy-mm-dd') into cbk_cls_date from ndata.LGF_PK_CBK_CLS; -- 渠道信息表 2021-07-08
SELECT to_char(date(max(txdate)),'yyyy-mm-dd') into change_maxdate FROM jyt_t_wy_sjyh_change ; --20210705 2021-07-05
dbms_output.put_line('结果表最大日期:'||change_maxdate);
--0.2 根据参数判断数据执行日期,如果参数无效根据结果表日期去计算;
if (v_date is null or v_date = '') then
-- 判断结果日期是否为空,为空则赋值铺底日期上个周期的数据
if (change_maxdate is null or change_maxdate = '') then
change_maxdate := '2021-07-06';
end if ;
-- 计算下一次执行日期
--select to_char(add_months(to_date(change_maxdate, 'YYYY-MM-DD'),1),'YYYY-MM-DD') into next_exec_date FROM DUAL;
select DATE_ADD(change_maxdate, 1) into next_exec_date FROM system.DUAL;
else
next_exec_date := v_date;
end if;
--0.3 比较执行日期和源表日期,不符合要求不执行
if (next_exec_date > person_base_date or next_exec_date > base_info_date or next_exec_date > cbk_cls_date ) then
dbms_output.put_line('不执行');
-- 如果未满足条件,则删除文本表,防止数据重复插入
v_sql := 'truncate table jyt_wy_sjyh_change_x'
execute immediate v_sql;
V_STEP := V_STEP + 100;
dbms_output.put_line('不正常执行,执行的步数:'||V_STEP);
else
dbms_output.put_line('执行');
end if;
-- 需要使用去掉“-’的日期
next_exec_date_trim := replace(next_exec_date,'-','');
dbms_output.put_line('执行日期为: '||next_exec_date);
dbms_output.put_line('执行日期去掉‘-’为: '||next_exec_date_trim);
dbms_output.put_line('jyt_t_personal_base_info最大日期为: '||person_base_date);
dbms_output.put_line('基本信息表的最大日期: '||base_info_date);
dbms_output.put_line('渠道信息表最大日期: '||cbk_cls_date);
CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
V_STEP := V_STEP + 1;
END IF;
if (v_step = 1) then
---按步骤执行 脚本日志监控
CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
v_sql := 'truncate table CDP_XXXXXXXX';
DBMS_OUTPUT.PUT_LINE(v_sql);
execute immediate v_sql;
CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
v_step :=v_step+1
end IF
exception
when others then
error_meg:=sqlerrm
CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),error_meg,'e')
return
end CDP_PRO_TRUC_XXXX;
--存储调起
DECLARE
yb_max_date STRING
result_max_date string
BEGIN
yb_max_date:= '2022-02-22';
result_max_date := '2022-02-22'
WHILE result_max_date < yb_max_date AND result_max_date <> ''
LOOP
result_max_date := date_add(result_max_date,1)
dbms_output.put_line(result_max_date);
--CDP_PRO_T_EMP_INFO_DAY(result_max_date);
END LOOP
END
----第二种:数据中台,任务调度存储
-- CREATE OR REPLACE PROCEDURE CDP_PRO_RGS_XXXX (v_date IN String)
-- is
-- v_pro_name String
-- v_sql String
-- v_step int
-- error_meg String
-- begin
-- /**
-- *存储入参及格式: v_date yyyy-mm-dd
-- *业务模块:数据中台——贵金属存储
-- *开发日期:2020-06-17
-- *开发人: 张晓波
-- */
-- v_step := 1
-- v_pro_name := 'CDP_PRO_RGS_XXXX'
-- ---脚本最开始 将执行状态置为 正在执行
-- UPDATE cdp_t_pro_status t SET t.is_running='0' ---0正在执行 1执行完毕
-- WHERE t.pro_name=v_pro_name;
-- --调度表 插入本存储最新一条的状态status
-- CDP_PRO_INSERT_JOB_BEG(v_pro_name,v_date);
--
-- if (v_step = 1) then
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
-- v_sql := 'truncate table CDP_T_RGS_INFO';
-- DBMS_OUTPUT.PUT_LINE(v_sql);
-- execute immediate v_sql
--
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
-- v_step :=v_step+1
-- end IF
-- if (v_step = 2) then
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
-- v_sql := 'truncate table CDP_T_RGS_INFO_MERGE'
-- execute immediate v_sql
-- --插入数据,满足条件就更新,不满足就插入一条
-- MERGE INTO cpd_t_cust_label p1
-- USING CDP_T_RGS_INFO_MERGE p2
-- ON (p1.CUST_BASE_ZZHM = p2.cert_code)
-- when matched then
-- update
-- SET
-- p1.prod_is_gjs = '1'
-- WHEN NOT MATCHED THEN
-- INSERT (cust_base_zzhm,prod_is_gjs)
-- values(cert_code,'1');
-- --更新剩余不为空的值
-- UPDATE cpd_t_cust_label SET prod_is_gjs = '0' WHERE prod_is_gjs IS NULL;
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
-- v_step :=v_step+1
-- end IF
-- if (v_step = 3) then
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
-- --脚本结束
-- UPDATE cdp_t_pro_status t SET t.is_running='1' ---0正在执行 1执行完毕
-- WHERE t.pro_name=v_pro_name;
-- --更新结果表 日期以及设定下次需要执行日期exectime
-- CDP_PRO_UPD_JGTABEL(replace(v_pro_name,'_PRO_','_T_')); ---注意此处参数为表名
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
-- v_step :=v_step+1
-- end IF
-- if (v_step = 4) then
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'0')
-- --调度表,更新是否可以执行状态(挂起存储)
-- CDP_PRO_INSERT_JOB_END(v_pro_name); --注意此处参数为存储名
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),v_date,'1')
-- v_step :=v_step+1
-- end IF
-- exception
-- when others then
-- error_meg:=sqlerrm
-- CDP_PRO_LOG(v_pro_name,v_step,to_char(sysdate,'yyyyMMddhhmmss'),error_meg,'e')
-- return
-- END CDP_PRO_RGS_XXXX;
-- --调用存储过程
-- --CALL CDP_PRO_RGS_XXXX("2020-06-07");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。