CREATE OR REPLACE PROC_CDM_TEST(V_DATE IN VARCHAR) AUTHID CURRENT_USER
/* *********************************************
@JOB_NAME[任务名称]
@DESC [任务描述]
@LOAD STRATEGY[加载策略]
@TARGET TABLE [目标表]
@ SOURCE TABLE [源表]
@CREATE DATE [创建日期]
@MODIFIED HISTORY[修改记录]
@TIPS
若关联表超过3个则采用建立临时表的方式,临时表命名规则为 目标表名称_TEMP01,目标表名称_TEMP02
************************************************/
IS
V_STEP INT :=0;
V_SQLCODE VARCHAR(100);
V_SQLERRM VARCHAR(6000);
V_TB_PART VAR(11);--分区名称
V_SQL VARCHAR(2000);
V_ODSFILENAME VARCHAR(200);--HDFS下数据文件名称
V_HDFS_NAME VARCHAR(200); --文件位置
V_TABLENAME VARCHAR(200);--目标表名称
V_PROC_NAME VARCHAR(200);--存储过程名称
V_TABLE_TYPE VARCHAR(200); --表类型, 1-全量加载 2-流水表加载
V_MIN_DATE VARCHAR(10);--表里最小的数据日期
V_OUT_DATA_POSITION VARCHAR(200);--导出数据文件存放的位置
v_etl_date VARCHAR(10);
ERROREXCEPTION EXCEPTION;
BEGIN
V_TABLENAME :='CDM_TEST'; --目标表名称
V_PROC_NAME :='PROC_CDM_TEST';
V_TABLE_TYPE :='1';
v_etl_date :=replace(V_DATE,'-','');
V_TB_PART :='P_'||REPLACE(V_ETL_DATE,'-','');--分区名称
begin
--数据清理
v_sql :='select min(data_dt) from cdm.'||V_TABLENAME||''')';
EXECUTE IMMEDIATE V_SQL INTO V_MIN_DATE;
V_RETURN :=CDM.THREEYEARS(V_TABLENAME,V_ETL_DATE,V_MIN_DATE);
end;
V_STEP :=V_STEP+1;
CDM.PROC_RECORD_CTL_JOB_LOG(V_TABLENAME,V_STEP,'数据清理',v_etl_date);
begin
--新建分区
v_sql :='ALTER TABLE CDM.'||V_TABLENAME||'ADD PARTITION ' ||V_TB_PART||'(DATA_DT='''||V_ETL_DATE|| ''')';
DBMS_OUTPUT.PUT_LINE(V_SQL);
EXECUTE IMMEDIATE V_SQL;
end;
EXCEPTION
WHEN ERROREXCEPTION THEN
V_SQLCODE := CAST(SQLCODE AS VARCHAR(100));
V_SQLERRM := SQLERRM;
CDM.PROC_CTL_JOB_ERROR(V_TABLENAME,V_STEP+1,NULL,V_ETL_DATE,V_SQLCODE,V_SQLERRM);
WHEN OTHERS THEN
V_SQLCODE := CAST(SQLCODE AS VARCHAR(100));
V_SQLERRM := SQLERRM;
CDM.PROC_CTL_JOB_ERROR(V_TABLENAME,V_STEP+1,NULL,V_ETL_DATE,V_SQLCODE,V_SQLERRM);
END