PLSQL 조건문

✒️ 2025-05-28 16:21 내용 수정


참고 자료 : https://logical-code.tistory.com/44

IF문

-- 조건이 1개인 IF문
IF 조건 THEN 실행문; -- 조건이 참일 때 실행
END IF;

-- IF-ELSE 구조
IF 조건 THEN 실행문; -- 조건이 참일 때 실행
ELSE 실행문; -- 조건이 거짓일 때 실행
END IF;

-- IF-ELSIF-ELSE 구조
IF 조건1 THEN 실행문1; -- 조건1이 참일 때 실행
ELSIF 조건2 THEN 실행문2; -- 조건2가 참일 때 실행
ELSE 실행문; -- 두 조건 모두 거짓일 때 실행
END IF;

IF문 예시

DECLARE
	NUM1 NUMBER := 10;
	NUM2 NUMBER := 3*5;
BEGIN
	IF NUM1 > NUM2 THEN
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'보다 크다.');
	ELSE
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'보다 작거나 같다.');
	END IF;
END;

IF 1.png

DECLARE
	NUM1 NUMBER := 45;
	NUM2 NUMBER := 7;
BEGIN
	IF MOD(45, 7) = 0 THEN
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'의 배수다.');
	ELSE
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'의 배수가 아니다.');
	END IF;
END;

IF 2.png

DECLARE
	NUM1 NUMBER := 3;
	NUM2 NUMBER := 8;
BEGIN
	IF SIGN(NUM1-NUM2) = -1 THEN
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'보다 작다.');
	ELSIF SIGN(NUM1-NUM2) = 0 THEN
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'과 같다.');
	ELSE 
		DBMS_OUTPUT.PUT_LINE(NUM1||'은 '||NUM2||'보다 크다.');
	END IF;
END;

IF 3.png


CASE문

-- WHEN 조건이 1개일 때
SELECT 컬럼명,
CASE WHEN 조건1 THEN 참1
	 ELSE 거짓1
END
FROM 테이블명;

-- WHEN 조건이 여러 개일 때
SELECT 컬럼명,
CASE WHEN 조건1 THEN 참1
	 WHEN 조건2 THEN 참2
	 ELSE 거짓2
END
FROM 테이블명;

CASE문 예시

-- EMPLOYEES 테이블에서 급여가 10000을 초과하면 OVER,
-- 10000 이하면 UNDER로 표시하기
SELECT FIRST_NAME, SALARY,
CASE WHEN SALARY > 10000 THEN 'OVER'
	 ELSE 'UNDER'
	 END AS COMP
FROM EMPLOYEES;

CASE 1.png

-- EMPLOYEES 테이블에서 직업이 'IT_PROG'인 사원들의
-- 급여 평균을 반올림하여 구하기
SELECT ROUND(AVG(CASE JOB_ID WHEN 'IT_PROG' THEN SALARY END)) AS AVG_SALARY
FROM EMPLOYEES;

CASE 2.png

-- EMPLOYEES 테이블에서 직업 이름에 CLERK를 포함하면 CLERK를,
-- MAN을 포함하면 MAN을, REP을 포함하면 REP을,
-- 셋 중 어느것도 포함하지 않으면 OTHER를 출력하기
SELECT FIRST_NAME, 
CASE WHEN JOB_ID LIKE '%CLERK%' THEN 'CLERK'
	 WHEN JOB_ID LIKE '%MAN%' THEN 'MAN'
	 WHEN JOB_ID LIKE '%REP%' THEN 'REP'
	 ELSE 'OTHER'
	 END AS JOB
FROM EMPLOYEES;

CASE 3.png

-- EMPLOYEES 테이블에서 입사일이 2005년 1월 1일 이후면 AFTER 2005.01.01를,
-- 입사일이 2003-01-01 과 2005-01-01 사이라면 2003~2005를,
-- 입사일이 2003년 1월 1일 이전이라면 BEFORE 2003.01.01를 출력하기
SELECT FIRST_NAME, HIRE_DATE, 
CASE WHEN HIRE_DATE > TO_DATE('2005-01-01', 'YYYY-MM-DD') THEN 'AFTER 2005.01.01'
	 WHEN HIRE_DATE BETWEEN TO_DATE('2003-01-01', 'YYYY-MM-DD') AND TO_DATE('2005-01-01', 'YYYY-MM-DD')
	 THEN '2003~2005'
	 ELSE 'BEFORE 2003.01.01'
	 END AS HIRED_YEAR
FROM EMPLOYEES;

CASE 4.png