(사용형식-1)
IF 조건문1 THEN
명령문1;
[ELSE
명령문2;]
END IF;
(사용형식-2)
IF 조건문1 THEN
명령문1;
ELSIF 조건문2 THEN
명령문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_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;
사용예2:: 첫 날에 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;
❗ 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;
ACCEPT W_CONSUM PROMPT '수도 사용량을 입력해주세요(단위: 톤)'
DECLARE
W_CONSUM NUMBER:=TO_NUMBER('&W_CONSUM');
W_CSF NUMBER := 0;
W_TOTAL NUMBER := 0;
BEGIN
CASE WHEN W_CONSUM BETWEEN 1 AND 10
THEN W_CSF:=W_CONSUM*1000;
WHEN W_CONSUM BETWEEN 11 AND 20
THEN W_CSF:=(W_CONSUM-10)*1300+10000;
WHEN W_CONSUM BETWEEN 21 AND 30
THEN W_CSF:=(W_CONSUM-20)*1700+23000;
ELSE W_CSF:=(W_CONSUM-30)*2500+40000;
END CASE;
W_TOTAL := W_CSF + (W_CONSUM*300)+ (W_CONSUM*350);
DBMS_OUTPUT.PUT_LINE('수도사용량:' || W_CONSUM);
DBMS_OUTPUT.PUT_LINE('수도요금:' || W_TOTAL);
END;