분기명령 if문

조수경·2021년 10월 28일
0

Oracle

목록 보기
17/19

분기명령 if문

2. 분기명령
 - IF문, CASE WHEN ~ THEN 문 제공
 

 1) IF문
  . 개발언어의 IF문과 동일 기능 제공


(사용형식 - 1)
  IF 조건문 THEN
    명령문1;
  [ELSE
    명령문2;]   -- 생략가능
  END IF;
  
(사용형식 - 2)
  IF 조건문1 THEN
    명령문1;
  ELSIF 조건문2 THEN
    명령문2;
      :  :
  ELSE
    명령문n;
  END IF;
  
(사용형식 - 3)  --중첩 IF
  IF 조건문1 THEN    --IF 이 조건이 맞으면 또 다음 IF 조건이 맞으면 또 다음 IF 
    IF 조건문2 THEN
    명령문1;
  ELSE
    명령문2;
  END IF;
ELSE
    명령문n;
END IF;

사용예) 년도를 입력받아 윤년과 평년을 구별하는 익명블록 작성 --!!!
윤년은 해당 년도가 4의 배수이면서 100의 배수가 아니거나 또는 400의 배수가 되는 해

      ACCEPT P_YEAR PROMPT '년도 : '
      DECLARE
        V_YEAR NUMBER := TO_NUMBER('&P_YEAR');
        V_MESSAGE VARCHAR2(100);
      BEGIN
        IF (MOD(V_YEAR,4) = 0 AND MOD(V_YEAR,100) != 0) OR 
           (MOD(V_YEAR,400) = 0)THEN
            V_MESSAGE:=V_YEAR||'년은 윤년';
        ELSE
           V_MESSAGE:=V_YEAR||'년은 평년';
      END IF;
      
      DBMS_OUTPUT.PUT_LINE( V_MESSAGE);
      END; 
      
사용예) 충남에 거주하는 회원을 추출하여 해당 회원들의 2005년 4-6월 구매집계를 구한 후 구매금액 합계가 
       100만원 이상이면 'vip 회원' 
       50-100만원 : '정상회원'
       그 이하이면 '관심회원'을 출력하시오

     DECLARE
      CURSOR CUR_ADD IS -- 여러사람 중 하나씩 꺼내오려고 CURSOR사용
        SELECT MEM_ID, MEM_NAME
          FROM MEMBER
         WHERE MEM_ADD1 LIKE '충남%';--거주지가 충남인 회원
         V_SUM NUMBER:=0;
         V_MESSAGE VARCHAR2(50);
     
    BEGIN
      FOR REC IN CUR_ADD LOOP
         SELECT SUM(CART_QTY*PROD_PRICE) INTO V_SUM
           FROM CART,PROD
        WHERE CART_PROD = PROD_ID
          AND SUBSTR(CART_NO,1,6) BETWEEN '200504'AND'200506'
          AND CART_MEMBER=REC.MEM_ID;
        IF V_SUM>=1000000 THEN
           V_MESSAGE:=REC.MEM_NAME||'회원은 VIP회원입니다.';
        ELSIF V_SUM>=500000 THEN
           V_MESSAGE:=REC.MEM_NAME||'회원은 정상회원입니다.';
        ELSE
           V_MESSAGE:=REC.MEM_NAME||'회원은 관심회원입니다.';
           END IF;
           DBMS_OUTPUT.PUT_LINE( V_MESSAGE);
      END LOOP;
     END;

2) CASE WHEN ~ THEN 문
  . 다중분기문
  . 자바의 SWITCH CASE문과 유사
  (사용형식-1)
   CASE 변수 
   WHEN 값1 THEN
     명령1;
   WHEN 값1 THEN
     명령1;
     :
     ELSE
     명령N;
   END CASE;
     
      (사용형식-1)
   CASE 변수 
   WHEN 값1 THEN
     명령1;
   WHEN 값2 THEN
     명령2;
     :
     ELSE
     명령N;
   END CASE;

사용예) 점수하나를 입력받아 '매우 우수','우수','보통','미흡','매우 미흡'로 평점을 부여하시오
       '매우 우수'는 90이상
       '우수'는 80이상
       '보통'는 70이상
       '미흡'은 60이상
       '매우 미흡'는 그 이하
       
       DECLARE
         V_SCORE NUMBER:=88;
         V_GRADE VARCHAR2(50);
       BEGIN
        CASE TRUNC(V_SCORE/10)
              WHEN 10 THEN
                 V_GRADE:='매우 우수';
              WHEN 9 THEN
                 V_GRADE:='매우 우수';
              WHEN 8 THEN
                 V_GRADE:='우수';
              WHEN 7 THEN
                 V_GRADE:='보통';
              WHEN 6 THEN
                 V_GRADE:='미흡';
          ELSE       
                  V_GRADE:='매우 미흡';
       END CASE;
       DBMS_OUTPUT.PUT_LINE(V_SCORE||' => '||V_GRADE);
       END;
      
      ( CASE WHEN 방식) 
    DECLARE
         V_SCORE NUMBER:=88;
         V_GRADE VARCHAR2(50);
       BEGIN
        CASE WHEN TRUNC(V_SCORE/10)=10 OR TRUNC(V_SCORE/10)= 9 THEN
                 V_GRADE:='매우 우수';
              WHEN (V_SCORE/10)=8 THEN
                 V_GRADE:='우수';
              WHEN(V_SCORE/10)=7 THEN
                 V_GRADE:='보통';
              WHEN (V_SCORE/10)=6 THEN
                 V_GRADE:='미흡';
          ELSE       
                  V_GRADE:='매우 미흡';
       END CASE;
       DBMS_OUTPUT.PUT_LINE(V_SCORE||' => '||V_GRADE);
       END;
profile
신입 개발자 입니다!!!

0개의 댓글