IT 끄적이기/업무(SeAH - MES)

# 프로시저 복습 (근무시간)

김팡 2020. 5. 19. 21:20

Oracle Database 

형변환 

For Loop

If 문

Insert 문에 valuse 대신 Select 문 사용

 

[1]

CREATE OR REPLACE PROCEDURE GMES.SP_EDU_DAY_KIM

    (P_EMP_NAME IN VARCHAR2)

  IS

   V_START_TIME VARCHAR2(4);

     V_END_TIME VARCHAR2(4);

  V_AAA VARCHAR2(20);

  V_SUM_TIME NUMBER ;

  BEGIN

    V_START_TIME := '0830';

     V_END_TIME := '1730';

 

 

      FOR C1 IN (SELECT TO_CHAR(YMD_DATE,'d') DD,YMD_DATE FROM COPY_YMD 

                                                            WHERE YMD_DATE NOT IN (SELECT YMD_DATE  

                                                                                     FROM 

                                                                                         (SELECT YMD,YMD_DATE 

                                                                                            FROM COPY_YMD

                                                                                           WHERE YMD BETWEEN '20200601' AND '20200630'

                                                                                          ) B

                                                                                     WHERE TO_CHAR(YMD_DATE,'d') IN (1,4,7) OR  YMD = '20200605') 

                                                                                AND YMD BETWEEN '20200601' AND '20200630') 

    LOOP

          V_SUM_TIME := (TO_DATE(TO_CHAR(C1.YMD_DATE, 'YYYY-MM-DD') || V_END_TIME || '00', 'YYYY-MM-DD HH24:MI:SS')

                       - TO_DATE(TO_CHAR(C1.YMD_DATE, 'YYYY-MM-DD') || V_START_TIME || '00', 'YYYY-MM-DD HH24:MI:SS')) * 24 ;

 

         

         IF C1.DD = 2 THEN 

            V_AAA := '월요일';

         ELSIF C1.DD = 3 THEN 

            V_AAA := '화요일';

         ELSIF C1.DD = 5 THEN 

            V_AAA := '목요일';

         ELSIF C1.DD = 6 THEN 

            V_AAA := '금요일';

         END IF;

 

INSERT INTO EDU_DAY (EDU_NAME,YMD_DATE,DAY_WEEK,START_TIME,END_TIME,SUM_TIME) 

            VALUES (P_EMP_NAME,C1.YMD_DATE,V_AAA,V_START_TIME,V_END_TIME,V_SUM_TIME);

    END LOOP;

    

  END;

[2]

CREATE OR REPLACE PROCEDURE GMES.SP_EDU_DAY_SEO

  (P_NAME IN VARCHAR2)

  IS

    V_START_TIME VARCHAR2(4);

    V_END_TIME VARCHAR2(4);

 

 

  BEGIN

    V_START_TIME := '0830';

    V_END_TIME := '1730';

 

    FOR C1 IN (SELECT YMD_DATE, 

                      CASE WHEN TO_CHAR(YMD_DATE, 'd') = '2' THEN '월요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '3' THEN '화요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '4' THEN '수요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '5' THEN '목요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '6' THEN '금요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '7' THEN '토요일'

                          WHEN TO_CHAR(YMD_DATE, 'd') = '1' THEN '일요일'

                      END AS DAY_WEEK 

                    FROM COPY_YMD

                    WHERE YMD BETWEEN '20200601' AND '20200630'

                      AND YMD_DATE NOT IN (SELECT YMD_DATE

                          FROM EDU_HOLIDAY

                          WHERE EDU_NAME = '서은주'))

    LOOP

        INSERT INTO EDU_DAY (EDU_NAME, YMD_DATE, DAY_WEEK, START_TIME, END_TIME, SUM_TIME)

          VALUES (P_NAME, C1.YMD_DATE, C1.DAY_WEEK, V_START_TIME, V_END_TIME

        

                  , (TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || V_END_TIME || '00', 'YYYY-MM-DD HH24:MI:SS')

                   - TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || V_START_TIME || '00', 'YYYY-MM-DD HH24:MI:SS')) * 24

 

                  );

    END LOOP;

  END;