ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 연속된 숫자 레코드별 반환, 1년치 날짜 레코드별 반환 쿼리, 달력데이터 생성 SP
    ♣ Tech & Biz Salon/Tech 2009. 12. 1. 09:03
    SELECT TO_DATE(LEVEL, 'DDD')
    FROM DUAL
    CONNECT BY LEVEL<=365

    쿼리를 할때 기존 지식 응용도 하고, 찾아도 보면서, 가능하면 한방에 할 수 있도록 노력하자 !

    예전에 만들었던  달력데이터 생성 SP는 위의 쿼리에 비해 무식이 흐르는도다

    CREATE OR REPLACE PROCEDURE
    SP_JEETA_HDAY_YEARDAY_MAKE
    (
        P_YEAR IN VARCHAR2
    )
    /**
    *************************************
    P_YEAR 에 특정년도를 넘기면, 해당 년도의 1년치 날짜를 생성함
    *************************************
    */
    IS

    EXP0 EXCEPTION;
    SQL_ERR_CD    VARCHAR2(80);

    V_FROM DATE := TO_DATE(P_YEAR || '0101','YYYYMMDD');
    V_TO DATE := TO_DATE(P_YEAR || '1231','YYYYMMDD');
    V_LP_DATE DATE;
    V_LP_CHAR VARCHAR2(8);

    BEGIN

        BEGIN
       
            DELETE FROM HDAY_YEARDAY
            WHERE YRDY_YEAR = P_YEAR;
           
            EXCEPTION WHEN OTHERS THEN
                RAISE EXP0;
           
        END;
       
        V_LP_DATE := V_FROM;
       
        WHILE V_LP_DATE < V_TO + 1
        LOOP

            V_LP_CHAR := TO_CHAR(V_LP_DATE, 'YYYYMMDD');
            BEGIN
           
                INSERT INTO HDAY_YEARDAY
                (
                    YRDY_YEAR
                    ,YRDY_DATE
                    ,YRDY_CHAR
                    ,OFFX_YSNO
                )
                VALUES
                (
                    P_YEAR
                    ,V_LP_DATE
                    ,V_LP_CHAR
                    ,CASE
                        WHEN TO_CHAR(V_LP_DATE, 'D') IN ('1','7')
                            THEN 1
                        ELSE 0
                        END
                );
               
                EXCEPTION WHEN OTHERS THEN
                    RAISE EXP0;
           
            END;       
            V_LP_DATE := V_LP_DATE + 1;

        END LOOP;
       
        COMMIT;
       
        EXCEPTION
       
            WHEN EXP0 THEN
                DBMS_OUTPUT.PUT_LINE('SQLCODE : '|| SQLCODE );
                 DBMS_OUTPUT.PUT_LINE('SQLERRM : '|| SQLERRM );
                 ROLLBACK;
               
    END;

    '♣ Tech & Biz Salon > Tech' 카테고리의 다른 글

    connect by ~ order siblings by~  (0) 2009.12.03
    GRANT, SYNONYM 문 추출하기  (0) 2009.11.24
    tnsname.ora 세팅없이 DBLINK 생성하기  (0) 2009.10.21
Designed by Tistory.