CREATE OR REPLACE PROCEDURE NVETLADM.PRC_EDS_SPC_OOCDATA

(

    PVVI_START_DATE        IN VARCHAR2,

    PVVI_END_DATE           IN VARCHAR2,

    PVVI_TSK_ID            IN VARCHAR2,

    PVVO_RETURN_VALUE       OUT VARCHAR2

)

IS

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

--                               Varialble Declaration

-- 오류가 발생하면 IF 문의 ELSE 문으로 가지는 않는다

-- Exception 구문으로 이동한다

-- Source Table : ODS_SPC_QUERY

-- Target Table : EDS_SPC_OOCDATA

 

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

--

    L_USER_EXCEPTION EXCEPTION;

--

    LVV_PROGRAM        VARCHAR2( 50)   := 'PRC_EDS_SPC_OOCDATA';

    LVV_MESSAGE        VARCHAR2(500);

    LVV_START_DATE      VARCHAR2( 50);

    LVV_END_DATE        VARCHAR2( 50);

    LVV_START_TIMEKEY   VARCHAR2( 50);

    LVV_END_TIMEKEY    VARCHAR2( 50);

    LVV_EVENT_NAME      VARCHAR2( 10);

--

    LVN_ERROR_CNT       NUMBER;

--

    LVV_TABLE1          VARCHAR2( 40);

    LVV_TABLE2          VARCHAR2( 40);

    LVN_TCOUNT1        NUMBER;

    LVN_TCOUNT2        NUMBER;

    LVV_TOTAL           VARCHAR2(100);

    LVV_SP              VARCHAR2(  5);

    LVV_DURATION        VARCHAR2( 50);

--

    LVV_QUERY       VARCHAR2(4000)   := ''; --// DYNAMIC

    rec_oocdata    NVEDBADM.EDS_SPC_OOCDATA@NVKEDB%rowtype; --// RECODE TYPE

--

    LVD_INTERFACE_TIME  DATE;

--

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

  -- ODS_SPC_QUERY CURSOR

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

--

    CURSOR cur_query_data IS

        SELECT UNIT_TYPE, QUERY

        FROM ODS_SPC_QUERY;

--

    TYPE CUR_DATA IS REF CURSOR;

    cur_oocdata CUR_DATA;

--

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

-- SUB PROGRAM : PROCEDURE

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

PROCEDURE LOG_TABLE_INSERT IS

--

BEGIN

--

    INSERT INTO ETL_PROCEDURE_HIST(

        NO

        , TASK_ID

        , PROCEDURE_ID

        , EVENT_TIMEKEY

        , EVENT_TIME

 

        , EVENT_NAME

        , LOG1

        , START_TIME

        , END_TIME

        , PROCESS_TIME

 

        , PERIOD

        , CNT)

    VALUES(ODS_LOG_NO.NEXTVAL

        , PVVI_TSK_ID

        , LVV_PROGRAM

        , TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF3')

        , SYSDATE

 

        , LVV_EVENT_NAME

        , LVV_MESSAGE

        , LVV_START_DATE

        , LVV_END_DATE

        , LVV_DURATION

 

        , PVVI_START_DATE || ' ~ ' || PVVI_END_DATE

        , TO_NUMBER(LVV_TOTAL));

--

    COMMIT;

--

EXCEPTION

    WHEN OTHERS THEN

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

END;

--

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

  -- MAIN BLOCK

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

--

BEGIN

--

    DBMS_APPLICATION_INFO.SET_MODULE(LVV_PROGRAM, 'MAIN_BLOCK');

--

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

--   

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

  -- VARIABLE INITIALIZATION

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

    LVV_TOTAL           := 0;

    LVN_ERROR_CNT       := 0;

    LVV_SP              := '::D::';

    LVV_TABLE1          := 'EDS_SPC_OOCDATA';

    LVN_TCOUNT1        := 0;

    LVN_TCOUNT2        := 0;

    LVV_DURATION        := NULL;

 

    LVV_START_TIMEKEY   := SUBSTR(PVVI_START_DATE, 1, 8) || SUBSTR(PVVI_START_DATE, 10, 6);

    LVV_END_TIMEKEY    := SUBSTR(PVVI_END_DATE, 1, 8) || SUBSTR(PVVI_END_DATE, 10, 6);

 

    SELECT SYSDATE INTO LVD_INTERFACE_TIME FROM DUAL;

--

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

  -- EDS_SPC_OOCDATA TABLE LOAD (NO 1)

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

--

    BEGIN

--

        DBMS_APPLICATION_INFO.SET_MODULE(LVV_PROGRAM, LVV_TABLE1 || ' LOAD');

--

        FOR c1 IN cur_query_data LOOP

--

            LVV_QUERY   := c1.QUERY;

--

            OPEN cur_oocdata FOR LVV_QUERY;

            LOOP

                FETCH cur_oocdata INTO rec_oocdata;

                EXIT WHEN cur_oocdata%NOTFOUND;

--

                BEGIN

--

                    INSERT INTO NVEDBADM.EDS_SPC_OOCDATA@NVKEDB(FACTORY, UNIT_TYPE, LOT_NAME, LOT_GROUP, LOT_ID

                        , GLASS_ID, PANEL_ID, PROMPT, RULE_CODE, UCL

                        , LCL, VALUE1, VALUE2, OPER_CODE, EQP_ID

                        , PRODUCT, DEFECT_TIMEKEY, LOTHST_TIMEKEY, PARAMETER, DISPLAY_CATEGORY

                        , DISPLAY_CODE, CHARTTYPE_CODE, CONTROLLIMIT_TYPE, USER_ID, INTERFACE_TIME)

                    VALUES(rec_oocdata.FACTORY, rec_oocdata.UNIT_TYPE, rec_oocdata.LOT_NAME, rec_oocdata.LOT_GROUP, rec_oocdata.LOT_ID

                        , rec_oocdata.GLASS_ID, rec_oocdata.PANEL_ID, rec_oocdata.PROMPT, rec_oocdata.RULE_CODE, rec_oocdata.UCL

                        , rec_oocdata.LCL, rec_oocdata.VALUE1, rec_oocdata.VALUE2, rec_oocdata.OPER_CODE, rec_oocdata.EQP_ID

                        , rec_oocdata.PRODUCT, rec_oocdata.DEFECT_TIMEKEY, rec_oocdata.LOTHST_TIMEKEY, rec_oocdata.PARAMETER, rec_oocdata.DISPLAY_CATEGORY

                        , rec_oocdata.DISPLAY_CODE, rec_oocdata.CHARTTYPE_CODE, rec_oocdata.CONTROLLIMIT_TYPE, rec_oocdata.USER_ID, rec_oocdata.INTERFACE_TIME);

 

                    LVN_TCOUNT1 := LVN_TCOUNT1 + 1;

 

                EXCEPTION

                    WHEN DUP_VAL_ON_INDEX THEN

                        UPDATE NVEDBADM.EDS_SPC_OOCDATA@NVKEDB

                        SET RULE_CODE = rec_oocdata.RULE_CODE

                            , LCL = rec_oocdata.LCL

                            , UCL = rec_oocdata.UCL

                            , VALUE1 = rec_oocdata.VALUE1

                            , VALUE2 = rec_oocdata.VALUE2

                            , EQP_ID = rec_oocdata.EQP_ID

                            , PRODUCT = rec_oocdata.PRODUCT

                            , LOTHST_TIMEKEY = rec_oocdata.LOTHST_TIMEKEY                           

                            , INTERFACE_TIME = SYSDATE

                        WHERE

                            FACTORY        = rec_oocdata.FACTORY

                            AND UNIT_TYPE   = rec_oocdata.UNIT_TYPE

                            AND LOT_ID      = rec_oocdata.LOT_ID

                            AND GLASS_ID    = rec_oocdata.GLASS_ID

                            AND PANEL_ID    = rec_oocdata.PANEL_ID

                            AND OPER_CODE   = rec_oocdata.OPER_CODE

                            AND DEFECT_TIMEKEY  = rec_oocdata.DEFECT_TIMEKEY;

                    WHEN OTHERS THEN

                        NULL;

--

                END;           

--

            END LOOP;

--

            CLOSE cur_oocdata;       

--

        END LOOP;

--

    END;

--

    COMMIT;

--

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

  -- EDS_SPC_OOCDATA TABLE LOAD COUNT CALCULATION

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

--

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

    LVV_TOTAL    := LVN_TCOUNT1;

 

    LVV_DURATION    := TO_CHAR( (TO_DATE(LVV_END_DATE, 'YYYY-MM-DD HH24:MI:SS')

                        - TO_DATE(LVV_START_DATE, 'YYYY-MM-DD HH24:MI:SS') )

                        * 86400);

 

    PVVO_RETURN_VALUE   := 'L'

        || LVV_SP

        || LTRIM(TO_CHAR(LVV_TOTAL,'0000000000'), ' ')

        || LVV_SP

        || LVV_PROGRAM

        || LVV_SP

        || LVV_DURATION;

 

--

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

--

    LVV_EVENT_NAME  := 'END';

    LVV_MESSAGE    := LVV_PROGRAM || ' : ' || LVV_PROGRAM || ' LOAD COMPLETE!';

--

    LOG_TABLE_INSERT;

--

    DBMS_OUTPUT.PUT_LINE(LVV_PROGRAM || ' : ' || LVV_PROGRAM || ' LOAD COMPLETE!');

--

    DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

 

EXCEPTION

    WHEN L_USER_EXCEPTION THEN

        ROLLBACK;

--

        LVV_EVENT_NAME  := 'ERROR';

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

        LVV_DURATION    := TO_CHAR( (TO_DATE(LVV_END_DATE, 'YYYY-MM-DD HH24:MI:SS')

                            - TO_DATE(LVV_START_DATE, 'YYYY-MM-DD HH24:MI:SS') )

                            * 86400);

--

        LOG_TABLE_INSERT;

--

        DBMS_OUTPUT.PUT_LINE(LVV_PROGRAM || '! => ' || LVV_MESSAGE);

--

        DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

        RAISE_APPLICATION_ERROR (-20200, LVV_PROGRAM || ' : ' || LVV_MESSAGE);

--

    WHEN OTHERS THEN

        ROLLBACK;

--

        LVV_EVENT_NAME  := 'ERROR';

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

        LVV_DURATION    := TO_CHAR( (TO_DATE(LVV_END_DATE, 'YYYY-MM-DD HH24:MI:SS')

                            - TO_DATE(LVV_START_DATE, 'YYYY-MM-DD HH24:MI:SS') )

                            * 86400);

 

        LVV_MESSAGE    := LVV_PROGRAM || ' : ' || 'Oracle Error => ' || SQLERRM;

--

        LOG_TABLE_INSERT;

--

        DBMS_OUTPUT.PUT_LINE(LVV_PROGRAM || ' ORACLE ERROR! => ' || SQLERRM);

--

        DBMS_APPLICATION_INFO.SET_MODULE('', '');

--

        RAISE_APPLICATION_ERROR (-20200, LVV_PROGRAM || ' ORACLE ERROR! : ' || SUBSTR(SQLERRM,1,150));

--

END;


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

PK 컬럼  (0) 2011.05.03
[DB - Oracle] TableSpace 생성  (0) 2010.11.10
[Oracle] 동적쿼리를 받아서 커서 처리  (0) 2010.10.04
[ORACLE] REGEXP_SUBSTR, REGEXP_REPLACE  (0) 2010.09.28
[Oracle] Function, Procedure Grant...  (0) 2010.09.11
[Oracle] Procedure  (0) 2010.08.11
Posted by pino93