CREATE OR REPLACE PROCEDURE ODS.ODS_CUSTOMER_I (pvvo_return_value   OUT VARCHAR2)

IS

--=================================================================================

--                               Varialble Declaration

-- 2010-08-11 20:00

--=================================================================================

--

    p_user_exception1 EXCEPTION;

--

    pvv_message        VARCHAR2( 500);

    pvv_err_msg        VARCHAR2(2000);

    pvv_start_date      VARCHAR2(  50);

    pvv_end_date        VARCHAR2(  50);   

    pvv_err_yn          VARCHAR2(  1);

--

    pvn_err_cnt1        NUMBER;

    pvv_err_tot        VARCHAR2(100);

--

    pvn_count1          NUMBER;

    pvv_total           VARCHAR2(100);

--

    pvn_update_cnt1    NUMBER;

    pvv_update_tot      VARCHAR2(100);

-- 

    pvv_program        VARCHAR2(50)    := 'ODS_CUSTOMER_I';

    pvv_prg_table       VARCHAR2(50)    := 'ODS_CUSTOMER';

--=================================================================================

-- ODS_CUSTOMER CURSOR

--=================================================================================

--

    CURSOR cur_data IS

        SELECT PLANT

        , PART_ID

        , REVISION_NO

        , SPEC_CODE

        , SPEC_NAME

        , SPEC_UNIT

        , SPEC_CHECK_MIN

        , SPEC_CHECK_MAX

        , SPEC_CHECK_TARGET

        , SPEC_CHECK_TOR_MIN

        , SPEC_CHECK_TOR_MAX

        , SPEC_MIN

        , SPEC_MAX

        , SPEC_TARGET

        , SPEC_TOR_MIN

        , SPEC_TOR_MAX

        , DESCRIPTION

        , OPTIONAL_1

        , OPTIONAL_2

        , OPTIONAL_3

        FROM ODS.ODS_CUSTOMER;

--

--=================================================================================

-- SUB PROGRAM : PROCEDURE

--=================================================================================

PROCEDURE log_table_insert IS

--

BEGIN

--

    INSERT INTO ODS.ODS_PROGRAM_LOG

        (NO

        , PROGRAM_NAME

        , LOG

        , START_DATE

        , END_DATE

        , ERR_YN)

    VALUES

        (ODS.ODS_LOG_NO.NEXTVAL

        , pvv_program

        , pvv_message

        , pvv_start_date

        , pvv_end_date

        , pvv_err_yn);

--

    COMMIT;

--

    EXCEPTION

        WHEN OTHERS THEN

            DBMS_OUTPUT.PUT_LINE('LOG TABLE INSERT ERROR : ' || SQLERRM);

END;

--=================================================================================

-- MAIN BLOCK

--=================================================================================

--

BEGIN

--

    DBMS_APPLICATION_INFO.SET_MODULE(pvv_program, 'MAIN_BLOCK');

--

    pvv_start_date := TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');

--   

--============================================

-- VARIABLE INITIALIZATION

--============================================

    pvn_count1 := NULL;

    pvv_total  := NULL;

--

--    DBMS_APPLICATION_INFO.SET_MODULE(pvv_program, 'DELETE');

--

--============================================

-- ODS_CUSTOMER TABLE DELETE

--============================================

--

    BEGIN

        DELETE FROM ODS.ODS_CUSTOMER;

    EXCEPTION

        WHEN NO_DATA_FOUND THEN

            NULL;

    END;

--

--============================================

-- ODS_CUSTOMER INSERT

--============================================

--

    DBMS_APPLICATION_INFO.SET_MODULE(pvv_prg_table, 'MAIN BLOCK 1');

--

    pvv_start_date      := TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');

    pvn_err_cnt1        := 0;

    pvn_count1          := 0;

    pvn_update_cnt1    := 0;

--

    FOR c1 IN cur_data LOOP

--

    BEGIN

        pvv_err_msg := NULL;

--

        BEGIN

            INSERT INTO ODS.ODS_CUSTOMER(PLANT, PART_ID, REVISION_NO, SPEC_CODE, SPEC_NAME

                , SPEC_UNIT, SPEC_CHECK_MIN, SPEC_CHECK_MAX, SPEC_CHECK_TARGET, SPEC_CHECK_TOR_MIN

                , SPEC_CHECK_TOR_MAX, SPEC_MIN, SPEC_MAX, SPEC_TARGET, SPEC_TOR_MIN

                , SPEC_TOR_MAX, DESCRIPTION, OPTIONAL_1, OPTIONAL_2, OPTIONAL_3)

            VALUES(c1.PLANT, c1.PART_ID, c1.REVISION_NO, c1.SPEC_CODE, c1.SPEC_NAME

                , c1.SPEC_UNIT, c1.SPEC_CHECK_MIN, c1.SPEC_CHECK_MAX, c1.SPEC_CHECK_TARGET, c1.SPEC_CHECK_TOR_MIN

                , c1.SPEC_CHECK_TOR_MAX, c1.SPEC_MIN, c1.SPEC_MAX, c1.SPEC_TARGET, c1.SPEC_TOR_MIN

                , c1.SPEC_TOR_MAX, c1.DESCRIPTION, c1.OPTIONAL_1, c1.OPTIONAL_2, c1.OPTIONAL_3);

 

        EXCEPTION

            WHEN DUP_VAL_ON_INDEX THEN

 

                pvv_err_msg    := pvv_program || ' ' || pvv_prg_table || ' DUPLICATE ERROR!.(' || c1.PLANT

                                               || '/'

                                               || c1.PART_ID

                                               || '/'

                                               || c1.REVISION_NO

                                               || '/'

                                               || c1.SPEC_CODE

                                               || ')';

--

                DBMS_OUTPUT.PUT_LINE(pvv_err_msg);

                DBMS_APPLICATION_INFO.SET_MODULE(pvv_program, pvv_err_msg);

--

                BEGIN                   

--

                    UPDATE ODS.ODS_CUSTOMER

                    SET SPEC_NAME               = c1.SPEC_NAME

                        , SPEC_UNIT            = c1.SPEC_UNIT

                        , SPEC_CHECK_MIN        = c1.SPEC_CHECK_MIN

                        , SPEC_CHECK_MAX        = c1.SPEC_CHECK_MAX

                        , SPEC_CHECK_TARGET    = c1.SPEC_CHECK_TARGET

                        , SPEC_CHECK_TOR_MIN    = c1.SPEC_CHECK_TOR_MIN

                        , SPEC_CHECK_TOR_MAX    = c1.SPEC_CHECK_TOR_MAX

                        , SPEC_MIN              = c1.SPEC_MIN

                        , SPEC_MAX              = c1.SPEC_MAX

                        , SPEC_TARGET           = c1.SPEC_TARGET

                        , SPEC_TOR_MIN          = c1.SPEC_TOR_MIN

                        , SPEC_TOR_MAX          = c1.SPEC_TOR_MAX

                        , DESCRIPTION           = c1.DESCRIPTION

                        , OPTIONAL_1            = c1.OPTIONAL_1

                        , OPTIONAL_2            = c1.OPTIONAL_2

                        , OPTIONAL_3            = c1.OPTIONAL_3

                    WHERE

                        PLANT                   = c1.PLANT

                        AND PART_ID            = c1.PART_ID

                        AND REVISION_NO        = c1.REVISION_NO

                        AND SPEC_CODE           = c1.SPEC_CODE;

--

--                  IF (sql%rowcount = 1) THEN

                        pvn_update_cnt1 := pvn_update_cnt1 + 1;

--                  END IF;

--

                EXCEPTION

                    WHEN NO_DATA_FOUND THEN

                        NULL;

                    WHEN OTHERS THEN

                        pvv_err_msg       := pvv_program || ' : ' || pvv_prg_table || ' UPDATE ERROR! => ' || SQLERRM;

                        pvv_message       := SUBSTR(pvv_err_msg, 1, 500);

 

                        DBMS_OUTPUT.PUT_LINE(pvv_message);

                        RAISE p_user_exception1;

                END;

            WHEN OTHERS THEN

                pvv_err_msg := pvv_program || ' : ' || pvv_prg_table || ' INSERT ERROR! => ' || SQLERRM;

--

                DBMS_APPLICATION_INFO.SET_MODULE(pvv_program || ' INSERT', SUBSTR(pvv_err_msg, 1, 500));

                pvn_err_cnt1 := pvn_err_cnt1 + 1;

                RAISE p_user_exception1;

--

            END;

--

        EXCEPTION

            WHEN p_user_exception1 THEN

                ROLLBACK;

 

                pvv_err_yn      := 'Y';

                pvv_end_date    := TO_CHAR(SYSDATE, 'YYYYMMDD HH24:MI:SS');

                pvv_message    := SUBSTR(pvv_err_msg, 1, 500);

        END;

 

    END LOOP;

--

    DBMS_OUTPUT.PUT_LINE(pvv_prg_table || ' : ERROR COUNT => ' || pvn_err_cnt1);

--

    COMMIT;

--

        pvv_total           := pvn_count1;

        pvv_update_tot      := pvn_update_cnt1;

        pvv_err_tot        := pvn_err_cnt1;

        pvvo_return_value   := 'SUCC:' || pvv_total || '/UPDATE:' || pvv_update_tot || '/ERR:' || pvv_err_tot;

--

        DBMS_OUTPUT.PUT_LINE('RETURN OUT VALUE => ' || pvvo_return_value);

--

        IF (pvv_err_yn != 'Y' OR pvv_err_yn IS NULL) THEN

--

            BEGIN

                pvv_err_yn          := 'N';

 

                -- ERROR MESSAGE 대신 INSERT COUNT, UPDATE COUNT

                pvv_message        := pvvo_return_value;

                pvv_end_date        := TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');

--

                log_table_insert;

--

                DBMS_OUTPUT.PUT_LINE(pvv_program || ' I/F COMPLETE!');

                DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

            END;

--

        ELSE

--

            BEGIN

-- SUCCESS, ERROR의 발생부분만 저장하기 위해서는 별도의 log 저장 테이블을 생성한다

                pvv_err_yn          := 'Y';

 

                -- ERROR MESSAGE 대신 INSERT COUNT, UPDATE COUNT

                pvv_message        := pvvo_return_value;

                pvv_end_date        := TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');

--

                log_table_insert;

--

                DBMS_OUTPUT.PUT_LINE(pvv_program || ' I/F ERROR!');

                DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

            END;

--

        END IF;

--

EXCEPTION

    WHEN OTHERS THEN

        ROLLBACK;

 

        pvv_err_msg    := pvv_program || ' : ' || pvv_prg_table || 'ORACLE ERROR! => ' || SQLERRM;

        pvv_err_yn      := 'Y';

        pvv_end_date    := TO_CHAR(SYSDATE, 'YYYYMMDD HH24:MI:SS');

        pvv_message    := SUBSTR(pvv_err_msg, 1, 500);

--

        log_table_insert;

--

        DBMS_OUTPUT.PUT_LINE(pvv_err_msg);           

        RAISE_APPLICATION_ERROR (-20100, pvv_message);

        DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

END;

'DB/ETL > Oracle' 카테고리의 다른 글

[ORACLE] REGEXP_SUBSTR, REGEXP_REPLACE  (0) 2010.09.28
[Oracle] Function, Procedure Grant...  (0) 2010.09.11
[Oracle] Procedure  (0) 2010.08.11
[Oracle] Temporary Table 생성  (0) 2010.07.30
[Oracle] 예외처리 Procedure Test  (0) 2010.07.29
[Oracle] Session Kill  (0) 2010.07.29
Posted by pino93