CREATE OR REPLACE PACKAGE BODY OG_PKG_CALC_LJJ IS /****************************************************************************** NAME OG_PKG_CALC_LJJ Package BODY PURPOSE REVISIONS Ver Date Author Description --------- ---------- --------------- ------------------------------------- 1.0 2012-02-23 1. Created this procedure. 1.1 2012-02-27 2. Created OG_JOB_LOG_LJJ procedure. 1.2 2012-02-27 3. Created OG_JOB_ERR_LJJ procedure. 1.3 2012-02-28 4. Created this PACKAGE. 1.4 2012-02-29 5. Fixed this PACKAGE. NOTES Automatically available Auto Replace Keywords Object Name OG_PKG_CALL_LJJ Sysdate 2012-02-27 Date and Time 2012-02-27, ¿ÀÈÄ 8½Ã, and 2012-02-29 ¿ÀÈÄ 4½Ã Username Table Name OG_ODS_ORDER_SUMMARY_LJJ, OG_ODS_ORDER_SUMMARY_RATE_LJJ OG_SYSTEM_JOB_LOG_LJJ, OG_SYSTEM_JOB_ERR_LJJ LOGIC 1.SUMMARY TABLE ÀûÀç ÇÁ·Î½ÃÀú°¡ µµ´Â Áß ¿À·ù ¾øÀ¸¸é, RATE TABLE ÀûÀç ÇÁ·Î½ÃÀú·Î À̵¿ÇÏ¿© ÀûÀç ÈÄ JOB_LOG ³²±è 2.SUMMARY TABLE ÀûÀç ÇÁ·Î½ÃÀú°¡ µµ´Â Áß ¿À·ù ¾øÀ¸¸é, RATE TABLE ÀûÀç ÇÁ·Î½ÃÀú·Î À̵¿ÇÏ¿© ÀûÀç, BUT, µµÁß ¿À·ù ¹ß»ý ½Ã JOB_LOG¿Í ERR_LOG ³²±è 3.SUMMARY TABLE ÀûÀç ÇÁ·Î½ÃÀú°¡ µµ´Â Áß ¿À·ù ¹ß»ý½Ã, RATE TABLE ÀûÀç ÇÁ·Î½ÃÀú´Â SKIP ÇÏ°í JOB_LOG¿Í ERR_LOG ³²±è *******************************************************************************/ -------------------------------------------------------------------------------- -- ÃÖÃÊ ÀÛ¼ºÀÏ : 2012.02.28 -------------------------------------------------------------------------------- PROCEDURE OG_ORDER_SUMMARY_LJJ_PROC( IN_FROM_DATE IN VARCHAR2 , IN_TO_DATE IN VARCHAR2 , n_SEQ OUT NUMBER , d_STIME OUT DATE , d_ETIME OUT DATE , v_YN OUT VARCHAR2 , n_ERCODE OUT NUMBER , v_ERMSG OUT VARCHAR2 , v_WORK_DATE OUT VARCHAR2 ) IS YEAR CHAR(4) := NULL; -- YEAR MONTH CHAR(3) := NULL; -- MONTH SHOP_CODE VARCHAR2(30) := NULL; -- SHOP_CODE SHOP_NAME VARCHAR2(50) := NULL; -- SHOP_NAME TOT_AMT NUMBER := 0 ; -- AGGÅ×À̺íÀÇ YEAR, MONTH, SHOPÀÇ SUM°ª PLAN_AMT NUMBER := 0 ; -- PLAN Å×À̺íÀÇ YEAR, MONTH, SHOP ÀÇ SUM°ª DIFF_AMT NUMBER := 0 ; -- TOT_AMT¿Í PL_AMT Â÷ÀÌÀÇ Àý´ë°ª DIFF_RATE NUMBER := 0 ; -- TOT_AMT ¿Í PL_AMT ÀÇ ´Þ¼ºÀ² ( TOT_AMT / PL_AMT ) * 100 BEGIN -- Àüü SUMMARY, RATE ó¸® ¸ðµâ SELECT MAX(SEQ) INTO n_SEQ FROM OG_SYSTEM_JOB_LOG_LJJ; -- ½ÃÄö½º ó¸® ¸ðµâ SELECT MAX(WORK_DATE) INTO v_WORK_DATE FROM OG_SYSTEM_JOB_LOG_LJJ; IF n_SEQ IS NULL THEN n_SEQ := 1; -- ¸ÇóÀ½ ½ÇÇà ½Ã ELSIF v_WORK_DATE = TO_CHAR(SYSDATE,'YYYYMMDD') THEN n_SEQ := n_SEQ + 1; -- °°Àº³¯ µ¹·ÈÀ» ¶§´Â +1 ELSE n_SEQ := 1; -- ´Ù¸¥³¯ µ¹·ÈÀ» ¶§´Â 1·Î Á¤ÀÇ END IF; d_STIME := SYSDATE; -- ÀÛ¾÷½Ã°£ ÀúÀå BEGIN -- SUMMARY Å×À̺í ó¸® ¸ðµâ MERGE INTO OG_ODS_ORDER_SUMMARY_LJJ T -- OG_ODS_ORDER_SUMMARY_LJJ ¿¡ µ¥ÀÌÅÍ ÀûÀç USING (SELECT A.YEAR , A.MONTH , SHOP_CODE , SHOP_NAME , A.TOT_AMT , A.PLAN_AMT , ABS((A.TOT_AMT - A.PLAN_AMT)) AS DIFF_AMT , DECODE(A.PLAN_AMT,0,0,((A.TOT_AMT / A.PLAN_AMT) * 100)) AS DIFF_RATE , CREATER , CREAT_TIME FROM (SELECT A.YEAR , A.MONTH , A.SHOP AS SHOP_CODE , A.NAME AS SHOP_NAME , A.TOT_AMT , NVL( (SELECT SUM(PL_AMT) FROM OG_ODS_PLAN_BY_MAEJANG_LJJ WHERE YEAR(+) = A.YEAR AND MONTH(+) = A.MONTH AND SHOP(+) = A.SHOP ), 0 ) AS PLAN_AMT , CREATER , CREAT_TIME FROM (SELECT /*+ INDEX( A OG_ODS_ORDER_AGGREGATION_PK ) */ A.YEAR , A.MONTH , A.SHOP , (SELECT NAME FROM OG_MST_SHOP_LJJ WHERE SHOP = A.SHOP ) AS NAME , SUM(A.TOT_AMT) AS TOT_AMT , 'LJJ' AS CREATER , SYSDATE AS CREAT_TIME FROM OG_ODS_ORDER_AGGREGATION_LJJ A WHERE BASE_DATE BETWEEN IN_FROM_DATE AND IN_TO_DATE GROUP BY A.YEAR, A.MONTH , A.SHOP ) A )A ) F ON ( F.YEAR = T.YEAR AND F.MONTH = T.MONTH AND F.SHOP_CODE = T.SHOP_CODE ) WHEN MATCHED THEN -- °ªÀÌ Á¸ÀçÇϸé UPDATE UPDATE SET T.SHOP_NAME = F.SHOP_NAME , T.TOT_AMT = F.TOT_AMT , T.PLAN_AMT = F.PLAN_AMT , T.DIFF_AMT = F.DIFF_AMT , T.DIFF_RATE = F.DIFF_RATE , T.CREATER = F.CREATER , T.CREAT_TIME = F.CREAT_TIME WHEN NOT MATCHED THEN -- °ªÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é INSERT INSERT ( T.YEAR , T.MONTH , T.SHOP_CODE , T.SHOP_NAME , T.TOT_AMT , T.PLAN_AMT , T.DIFF_AMT , T.DIFF_RATE , T.CREATER , T.CREAT_TIME ) VALUES ( F.YEAR , F.MONTH , F.SHOP_CODE , F.SHOP_NAME , F.TOT_AMT , F.PLAN_AMT , F.DIFF_AMT , F.DIFF_RATE , F.CREATER , F.CREAT_TIME ); s_YEAR := F.YEAR -- YEAR s_MONTH := F.MONTH --MONTH DBMS_OUTPUT.PUT_LINE(v_YEAR||v_MONTH); d_ETIME := SYSDATE; -- ÀÛ¾÷Á¾·á½Ã°£ ÀúÀå EXCEPTION WHEN OTHERS THEN n_ERCODE := SQLCODE; -- ¿¡·¯ÄÚµå º¯¼ö¿¡ ÀúÀå v_ERMSG := SQLERRM; -- ¿¡·¯¸Þ½ÃÁö º¯¼ö¿¡ ÀúÀå DBMS_OUTPUT.PUT_LINE('JOB_LOG ¿¡·¯ÄÚµå:' || n_ERCODE || ' ¿¡·¯¸Þ½ÃÁö:' || v_ERMSG || ' ¼º°ø½ÇÆп©ºÎ:' || v_YN); END; IF TO_CHAR(n_ERCODE) = '0' OR TO_CHAR(n_ERCODE) IS NULL THEN v_YN := 'Y'; -- ¿¡·¯¹ß»ý X ELSE v_YN := 'N'; ROLLBACK; GOTO JUMP; -- ¿¡·¯¹ß»ý (RATE ÀûÀç ÇÏÁö¾Ê°í ¹Ù·Î JOB°ú ERR_JOB¿¡ ±â·Ï END IF; SAVEPOINT MERGE_RATE; BEGIN -- RATE Å×À̺í ó¸® ¸ðµâ MERGE INTO OG_ODS_ORDER_SUMMARY_RATE_LJJ T USING (SELECT * FROM (SELECT A.YEAR , A.MONTH , SHOP_CODE , SHOP_NAME , DECODE(A.PLAN_AMT,0,0,((A.TOT_AMT / A.PLAN_AMT) * 100)) AS DIFF_RATE , 'LJJ' AS CREATER , SYSDATE AS CREAT_TIME FROM (SELECT A.YEAR , A.MONTH , A.SHOP AS SHOP_CODE , A.NAME AS SHOP_NAME , A.TOT_AMT , NVL( (SELECT SUM(PL_AMT) FROM OG_ODS_PLAN_BY_MAEJANG_LJJ WHERE YEAR(+) = A.YEAR AND MONTH(+) = A.MONTH AND SHOP(+) = A.SHOP ), 0 ) AS PLAN_AMT , CREATER , CREAT_TIME FROM (SELECT /*+ INDEX( A OG_ODS_ORDER_AGGREGATION_PK ) */ A.YEAR , A.MONTH , A.SHOP , (SELECT NAME FROM OG_MST_SHOP_LJJ WHERE SHOP = A.SHOP ) AS NAME , SUM(A.TOT_AMT) AS TOT_AMT , 'LJJ' AS CREATER , SYSDATE AS CREAT_TIME FROM OG_ODS_ORDER_AGGREGATION_LJJ A WHERE BASE_DATE BETWEEN IN_FROM_DATE AND IN_TO_DATE GROUP BY A.YEAR, A.MONTH , A.SHOP ) A )A ) A WHERE DIFF_RATE >= 100 ) F ON ( F.YEAR = T.YEAR AND F.MONTH = T.MONTH AND F.SHOP_CODE = T.SHOP_CODE ) WHEN MATCHED THEN -- °ªÀÌ Á¸ÀçÇϸé UPDATE UPDATE SET T.SHOP_NAME = F.SHOP_NAME , T.DIFF_RATE = F.DIFF_RATE , T.CREATER = F.CREATER , T.CREAT_TIME = F.CREAT_TIME WHEN NOT MATCHED THEN -- °ªÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é INSERT INSERT ( T.YEAR , T.MONTH , T.SHOP_CODE , T.SHOP_NAME , T.DIFF_RATE , T.CREATER , T.CREAT_TIME ) VALUES ( F.YEAR , F.MONTH , F.SHOP_CODE , F.SHOP_NAME , F.DIFF_RATE , F.CREATER , F.CREAT_TIME ); d_ETIME := SYSDATE; -- ÀÛ¾÷Á¾·á½Ã°£ ÀúÀå EXCEPTION WHEN OTHERS THEN n_ERCODE := SQLCODE; -- ¿¡·¯ÄÚµå º¯¼ö¿¡ ÀúÀå v_ERMSG := SQLERRM; -- ¿¡·¯¸Þ½ÃÁö º¯¼ö¿¡ ÀúÀå DBMS_OUTPUT.PUT_LINE('JOB_ERR_LOG ¿¡·¯ÄÚµå:' || n_ERCODE || ' ¿¡·¯¸Þ½ÃÁö:' || v_ERMSG || ' ¼º°ø½ÇÆп©ºÎ:' || v_YN); END; IF TO_CHAR(n_ERCODE) = '0' OR TO_CHAR(n_ERCODE) IS NULL THEN v_YN := 'Y'; -- ¿¡·¯¹ß»ý X ELSE v_YN := 'N'; -- ¿¡·¯¹ß»ý ROLLBACK TO MERGE_RATE; END IF; <> DBMS_OUTPUT.PUT_LINE('JUMP½ÃÁ¡ ¿¡·¯ÄÚµå:' || n_ERCODE || ' ¿¡·¯¸Þ½ÃÁö:' || v_ERMSG || ' ¼º°ø½ÇÆÐ:' || v_YN); BEGIN OG_PKG_CALC_LJJ.OG_JOB_LOG_LJJ ( n_SEQ => n_SEQ -- ¿¡·¯ ¹Ì ¹ß»ý½Ã OG_JOB_LOG_LJJ È£Ãâ JOB·Î±× ±â·Ï , v_YEAR => s_YEAR , v_MONTH => s_MONTH , v_SHOP_CODE => SHOP_CODE , d_STIME => d_STIME , d_ETIME => d_ETIME , v_YN => v_YN ); END; IF v_YN = 'N' THEN -- ¿¡·¯ ¹ß»ý½Ã OG_JOB_ERR_LJJ È£Ãâ ¿¡·¯·Î±× ±â·Ï BEGIN OG_PKG_CALC_LJJ.OG_JOB_ERR_LJJ ( d_STIME => d_STIME , n_SEQ => n_SEQ , v_YEAR => s_YEAR , v_MONTH => s_MONTH , v_SHOP_CODE => SHOP_CODE , n_ERCODE => n_ERCODE , v_ERMSG => v_ERMSG ); END; END IF; n_ERCODE := 0; v_ERMSG := NULL; DBMS_OUTPUT.PUT_LINE('µ¥ÀÌÅÍ ÀÔ·Â ¿Ï·á'); COMMIT; END; -------------------------------------------------------------------------------- -- LOG ±â·Ï ÇÁ·Î½ÃÀú -------------------------------------------------------------------------------- PROCEDURE OG_JOB_LOG_LJJ ( n_SEQ IN VARCHAR2 , v_YEAR IN VARCHAR2 , v_MONTH IN VARCHAR2 , v_SHOP_CODE IN VARCHAR2 , d_STIME IN DATE , d_ETIME IN DATE , v_YN IN VARCHAR2 ) IS BEGIN INSERT INTO OG_SYSTEM_JOB_LOG_LJJ ( WORK_DATE ,SEQ ,YEAR ,MONTH ,SHOP ,START_TIME ,END_TIME ,SUCCESS_YN ) VALUES ( TO_CHAR(d_STIME, 'YYYYMMDD') -- ÀÛ¾÷¼öÇàÀÏÀÚ , n_SEQ -- ¼ø¹ø , v_YEAR -- YEAR , v_MONTH -- MONTH , v_SHOP_CODE -- SHOP_CODE , d_STIME -- ÀÛ¾÷¼öÇà½ÃÀ۽ð£ , d_ETIME -- ÀÛ¾÷Á¾·á½Ã°£ , v_YN -- ÀÛ¾÷¼º°ø¿©ºÎ ); END; -------------------------------------------------------------------------------- -- ERR_LOG ±â·Ï ÇÁ·Î½ÃÀú -------------------------------------------------------------------------------- PROCEDURE OG_JOB_ERR_LJJ ( d_STIME IN DATE , n_SEQ IN VARCHAR2 , v_YEAR IN VARCHAR2 , v_MONTH IN VARCHAR2 , v_SHOP_CODE IN VARCHAR2 , n_ERCODE IN NUMBER , v_ERMSG IN VARCHAR2 ) IS BEGIN INSERT INTO OG_SYSTEM_ERR_LOG_LJJ ( WORK_DATE ,SEQ ,YEAR ,MONTH ,SHOP ,ERR_CODE ,ERR_MSG ,ERR_TIME ) VALUES ( TO_CHAR(d_STIME, 'YYYYMMDD') -- ÀÛ¾÷¼öÇàÀÏÀÚ(YYYYMMDD) , n_SEQ -- ¼ø¹ø , v_YEAR -- YEAR , v_MONTH -- MONTH , v_SHOP_CODE -- SHOP_CODE , n_ERCODE -- ¿¡·¯ÄÚµå , v_ERMSG -- ¿¡·¯¸Þ½ÃÁö , SYSDATE -- ¿¡·¯¹ß»ý½Ã°£ ); END; END OG_PKG_CALC_LJJ; /