CREATE OR REPLACE PROCEDURE PR_RC_GEN_WKNO(P_YYYY IN VARCHAR2) IS
BEGIN
  
       INSERT INTO TB_RC_WKNO (
          COMP_CD, 
          YM, 
          AGG_WKNO, 
          BG_DT, 
          END_DT, 
          CRT_USR_ID, 
          CRT_DTM, 
          UPDT_USR_ID, 
          UPDT_DTM
          )
          SELECT
          '100'
          , MM
          , RANK() OVER(PARTITION BY MM ORDER BY WW) WKNO
          , S_DATE
          , E_DATE
          , 1
          , SYSDATE
          , 1
          , SYSDATE
          FROM (
            SELECT 
              WW
              , S_DATE
              , E_DATE
              , CASE WHEN SUBSTR(S_DATE,5,2)=SUBSTR(E_DATE,5,2) THEN SUBSTR(S_DATE,1,6) 
                     WHEN TO_NUMBER(SUBSTR(E_DATE,7,2))<4 THEN SUBSTR(S_DATE,1,6) 
                     ELSE SUBSTR(E_DATE,1,6) END MM
              FROM (
                SELECT 
                WW
                , MIN(DD) KEEP ( DENSE_RANK FIRST  ORDER BY DD ) AS S_DATE
                , MAX(DD) KEEP ( DENSE_RANK LAST  ORDER BY DD ) AS E_DATE
                FROM (
                  SELECT   TO_CHAR(TO_DATE(P_YYYY||'0101','YYYYMMDD') + LEVEL-1, 'YYYYMMDD') AS DD
                         , TO_CHAR(TO_DATE(P_YYYY||'0101','YYYYMMDD') + LEVEL-1, 'DAY') AS DAYOFWEEK
                         , TO_CHAR(TO_DATE(P_YYYY||'0101','YYYYMMDD') + LEVEL-1, 'WW') AS WW
                         , TO_CHAR(TO_DATE(P_YYYY||'0101','YYYYMMDD') + LEVEL-1, 'MM') AS MM
                     FROM DUAL
                  CONNECT BY LEVEL <= TO_DATE(P_YYYY||'1231','YYYYMMDD')-TO_DATE(P_YYYY||'0101','YYYYMMDD')+1
                ) GROUP BY WW 
              ) 
          )    
          ;
          
          COMMIT;
  
END PR_RC_GEN_WKNO;

'DB' 카테고리의 다른 글

ER Studio 물리테이블 생성  (0) 2019.02.09
FB firebird 디비 생성  (0) 2014.09.02
Firebird 클라이언트 툴 DbVisualizer 설정  (0) 2014.08.31
Posted by 레디37
,