行云日志捕获

CREATE OR REPLACE procedure  PROC_RECORD_CTL_JON_error(V_TABLEname VARCHAR,V_STEP NUMBER,V_STEP_DESC VARCHAR,V_ETL_DT VARCHAR,v_sqlcode varchar,v_sqlerrm varchar) AS
    V_NUM INT :=0 ;--
    V_SQL VARCHAR(2000);
    V_PROC_NAME VARCHAR(2000);
BEGIN
    v_proc_name := 'proc'||v_tablename ;
    v_sql := 'select xount(1) from v$user_tab_parts where table_name=''cdm_ctl_job_log'' and part_name=''p_'||v_tablename||'''';
    dbms_output.put_line(v_sql);
    execute immediate v_sql into v_num;
    dbms_output.put_line(v_num);
    if v_num<=0 then
    --add partiton
    v_sql :='alter table cdm_ctl_job_log add partiton p_' || v_tablename || '(proc_name=''proc_'||v_tablename||''')';
    dbms_output.put_line(v_sql);
    execute immediate v_sql;
        insert into cdm_ctl_job_log(
            proc_name, --过程名
            step,--步骤
            step_desc,--步骤描述
            etl_dt,--etl日期
            operator_time,--操作时间
            sql_code,
            sql_errror    
        )
        partition on (proc_name=v_proc_name)
        select 
            v_proc_name,
            v_step,
            v_step_desc,
            v_etl_dt,
            current_date,
            v_sqlcode,
            v_sqlerrm
            
        from dual;
    elsif v_num>0 then
        insert into cdm_ctl_job_log(
        proc_name, --过程名
        step,--步骤
        step_desc,--步骤描述
        etl_dt,--etl日期
        operator_time,--操作时间
        sql_code,
        sql_errror    
        )
        partition on (proc_name=v_proc_name)
        select 
            v_proc_name,
            v_step,
            v_step_desc,
            v_etl_dt,
            current_date,
            v_sqlcode,
            v_sqlerrm
        from dual;
    end if;
END;

 

posted @ 2022-03-28 15:29  rjm123456  阅读(31)  评论(0编辑  收藏  举报