Source: DMF/PuC/AIF/DMF_GenerateInserts.sql

 
 
DECLARE    
 
    p_table_name    VARCHAR2(50) := 'W_RTL_PROMO_EXT_DTS';
    p_dmf_table_name VARCHAR2(50) := 'ORI_PROMOTION';
    p_owner         VARCHAR2(50) := 'RADM01'; --RMS01
    p_table_domain  VARCHAR2(50) := 'PROMOTION';
	p_flow_id		VARCHAR2(50) := 6001;
	p_interface_id	VARCHAR2(50) := 999999;
	p_destination 	VARCHAR2(50) := 1;
    v_sql   		CLOB;
    v_data_type  	VARCHAR2(400);
 
BEGIN
 
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('REGISTERING TABLE: ' || UPPER(p_dmf_table_name));
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
 
    ------------------------------------------------------------------
    -- INSERT INTO DSA_TABLES
    ------------------------------------------------------------------
    v_sql :=
        'INSERT INTO dmf.dsa_tables ' ||
        '(table_domain, table_name, table_owner, table_type, table_source, dsa_gen_date, status) VALUES (' ||
        '''' || p_table_domain || ''',' ||
        '''' || UPPER(p_dmf_table_name) || ''',' ||
        '''DSA'',' ||
        '''P'',' ||
        '''RMS'',' ||
        'SYSDATE,' ||
        '''A'');';
 
    DBMS_OUTPUT.PUT_LINE(v_sql);
    --EXECUTE IMMEDIATE v_sql;
 
    DBMS_OUTPUT.PUT_LINE('-------------------------------------');
 
    ------------------------------------------------------------------
    -- INSERT INTO MIGR_TABLES
    ------------------------------------------------------------------
    v_sql :=
        'INSERT INTO dmf.migr_tables ' ||
        '(table_domain, table_name, flow_id, interface_id, destination, load_ctrl_to_final_type, status) VALUES (' ||
        '''' || p_table_domain || ''',' ||
        '''' || UPPER(p_dmf_table_name) || ''',' || 
        '''' || p_flow_id || ''',' || 
        '''' || p_interface_id || ''',' || 
        '''' || p_destination || ''',' || 
        '''T'',' ||
        '''A'');';
 
    DBMS_OUTPUT.PUT_LINE(v_sql);
    --EXECUTE IMMEDIATE v_sql;
 
    DBMS_OUTPUT.PUT_LINE('-------------------------------------');
 
    ------------------------------------------------------------------
    -- COLUMNS LOOP
    ------------------------------------------------------------------
    FOR c IN (
        SELECT
            *
        FROM all_tab_columns
        WHERE owner = UPPER(p_owner)
        AND table_name = UPPER(p_table_name)
        AND COLUMN_ID IS NOT NULL
        ORDER BY column_id
    )
    LOOP
         ------------------------------------------------------------------
        -- BUILD FULL ORACLE DATATYPE (DDL STYLE)
        ------------------------------------------------------------------
        v_data_type := c.data_type;
 
        -- VARCHAR / CHAR
        IF c.data_type IN ('VARCHAR2','CHAR','NCHAR','NVARCHAR2') THEN
            IF c.char_used = 'C' THEN
                v_data_type := c.data_type || '(' || c.char_length || ' CHAR)';
            ELSE
                v_data_type := c.data_type || '(' || c.data_length || ')';
            END IF;
 
        -- NUMBER
        ELSIF c.data_type = 'NUMBER' THEN
            IF c.data_precision IS NULL THEN
                v_data_type := 'NUMBER';
            ELSIF c.data_scale IS NULL OR c.data_scale = 0 THEN
                v_data_type := 'NUMBER(' || c.data_precision || ')';
            ELSE
                v_data_type := 'NUMBER(' || c.data_precision || ',' || c.data_scale || ')';
            END IF;
 
        -- TIMESTAMP
        ELSIF c.data_type LIKE 'TIMESTAMP%' THEN
            IF c.data_scale IS NOT NULL THEN
                v_data_type := 'TIMESTAMP(' || c.data_scale || ')';
            ELSE
                v_data_type := 'TIMESTAMP';
            END IF;
        END IF;
 
        --------------------------------------------------------------
        -- DSA_COLUMNS INSERT
        --------------------------------------------------------------
        v_sql :=
            'INSERT INTO dmf.dsa_columns ' ||
            '(table_name, column_name, data_type, column_id, status) VALUES (' ||
            '''' || UPPER(p_dmf_table_name) || ''',' ||
            '''' || c.column_name || ''',' ||
            '''' || v_data_type  || ''',' ||
            c.column_id || ',' ||
            '''A'');';
 
        DBMS_OUTPUT.PUT_LINE(v_sql);
        --EXECUTE IMMEDIATE v_sql;
 
 
        --------------------------------------------------------------
        -- MIGR_COLUMNS INSERT
        --------------------------------------------------------------
        v_sql :=
            'INSERT INTO dmf.migr_columns ' ||
            '(table_name, column_name, data_type, mandatory_flg, status, dsa_table_name, dsa_column_name,dc_file_column_sequence,dc_column_name) VALUES (' ||
            '''' || UPPER(p_dmf_table_name) || ''',' ||
            '''' || c.column_name || ''',' ||
            '''' || v_data_type || ''',' ||
            '''' || CASE WHEN c.nullable = 'N' THEN 'Y' ELSE 'N' END || ''',' ||
            '''A'',' ||
            '''' || UPPER(p_dmf_table_name) || ''',' ||
            '''' || c.column_name || ''',' ||
            c.column_id || ',' ||
            '''' || c.column_name || 
            ''');';
 
        DBMS_OUTPUT.PUT_LINE(v_sql);
        --EXECUTE IMMEDIATE v_sql;
 
    END LOOP;
 
    COMMIT;
 
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('REGISTRATION COMPLETED');
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
 
END;
/