분기명령
 - PL/SQL에서 제공되는 분기문에는 IF, CASE WHEN ~ THEN이 존재 함
1) IF문
 - 개발언어의 IF문과 동일 기능 제공

(사용형식 - 1)
  IF 조건문 THEN
     명령문1;
  [ELSE
       명령문2;]
   END IF;
 
(사용형식-2)
  IF 조건문1 THEN
     명령문1;
  ELSIF 조건문2 THEN --ELSEIF X
     명령문2;
       :
  ELSE
     명령문n;
  END IF;   
  
(사용형식-3)
  IF 조건문1 THEN
     IF 조건문2 THEN
        명령문1;
     ELSE
        명령문2;
     END IF;  
   ELSIF 조건문3 THEN
      명령문3;
        :
   ELSE
      명령문n;
   END IF;

✔사용예) 년도를 입력받아 윤년과 평년을 구별하는 블록을 작성하시오.
               윤년 : ((4의 배수)이면서 (100의 배수가 아니거나)) (400의 배수)가 되는 해

ACCEPT P_YEAR PROMPT '년도입력(YYYY) : '
  DECLARE
    L_YEAR NUMBER:=TO_NUMBER('&P_YEAR');
    L_RES VARCHAR2(500);
  BEGIN
    IF (MOD(L_YEAR,4)= 0 AND MOD(L_YEAR,100)!=0) OR(MOD(L_YEAR,400)=0) THEN
        L_RES:=L_YEAR||'년은 윤년입니다.';
    ELSE    
        L_RES:=L_YEAR||'년은 평년입니다.'; 
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(L_RES);    
  END;

 ✔사용예) 첫 날에 100원, 둘째날 부터 전날의 2배씩 저축할때 최초로 100만원을 넘는 날과
                 저축액수를 구하시오.

DECLARE
    L_SUM NUMBER:= 0; -- 저축 총액
    L_DAMT NUMBER:=100; --매일 저축할 액수
    L_DAYS NUMBER:= 1; --날수
  BEGIN
    LOOP
      L_SUM:=L_SUM+L_DAMT;
      IF L_SUM>=1000000 THEN
        EXIT;
      ELSE
        L_DAMT:=L_DAMT*2;
        L_DAYS:=L_DAYS+1;
      END IF;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('날수 : '||L_DAYS);
    DBMS_OUTPUT.PUT_LINE('저축액수 : '||L_SUM);
  END;

2) CASE WHEN ~ THEN
 - 다중분기문
 - JAVA의 SWITCH CASE문과 유사 기능 제공

(사용형식-1)
  CASE WHEN 조건1 THEN
            명령1;
       WHEN 조건2 THEN
            명령2;   
             :
       [ELSE 
             명령n;]
  END CASE;             
     
(사용형식-2)
  CASE 조건
       WHEN 값1 THEN
            명령1;
       WHEN 값2 THEN
            명령2;     
             :
      [ELSE
           명령n;]
  END CASE;

'ORACLE 복습 & 정리' 카테고리의 다른 글

[ORACLE] 저장프로시져 221201-04  (1) 2022.12.01
[ORACLE] 반복문 221201-03  (0) 2022.12.01
[ORACLE] 커서(CURSOR) 2221201-01  (0) 2022.12.01
[ORACLE] PL/SQL 221130-04  (1) 2022.11.30
[ORACLE] INDEX 221130-03  (0) 2022.11.30

+ Recent posts