存储demo
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