CASE문
CASE문은 3장에서 배웠던 CASE 표현식과 비슷하다. SELECT 절에서 CASE 표현식을 사용했듯이 PL/SQL 프로그램 내에서도 CASE문을 사용할 수 있는데, 그 구문은 다음과 같다.
<유형 1>
CASE 표현식
WHEN 결과1 THEN
처리문1;
WHEN 결과2 THEN
처리문2;
...
ELSE
기타 처리문;
END CASE;
<유형 2>
CASE WHEN 표현식1 THEN
처리문1;
WHEN 표현식2 THEN
처리문2;
...
ELSE
기타 처리문;
END CASE;
두 가지 유형으로 CASE문을 사용할 수 있는데, 첫 번째는 CASE 다음에 바로 표현식을 두고 이 표현식 결과 값에 따라 WHEN… THEN에서 처리하는 유형이다. 두 번째 유형은 표현식 자체를 각각의 WHEN 다음에 두고 THEN 이하에서 처리하는데 보통 후자를 많이 사용한다. 그 이유는 WHEN 이하에서 다양한 표현식을 사용해 조건을 검색할 수 있기 때문이다.
급여에 따라 ‘높음’, ‘낮음’을 출력하는 IF문을 CASE문으로 변환해 보자.
입력
DECLARE
vn_salary NUMBER := 0;
vn_department_id NUMBER := 0;
BEGIN
vn_department_id := ROUND(DBMS_RANDOM.VALUE (10, 120), -1);
SELECT salary
INTO vn_salary
FROM employees
WHERE department_id = vn_department_id
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE(vn_salary);
CASE WHEN vn_salary BETWEEN 1 AND 3000 THEN
DBMS_OUTPUT.PUT_LINE('낮음');
WHEN vn_salary BETWEEN 3001 AND 6000 THEN
DBMS_OUTPUT.PUT_LINE('중간');
WHEN vn_salary BETWEEN 6001 AND 10000 THEN
DBMS_OUTPUT.PUT_LINE('높음');
ELSE
DBMS_OUTPUT.PUT_LINE('최상위');
END CASE;
END;
결과
12008
최상위
IF…ELSE로 이어진 구문을 CASE문으로 변경했는데, 이렇게 여러 가지 조건을 처리하는 경우에는 CASE문을 사용했을 때가 좀더 깔끔해 보인다. 그렇다고 무조건 여러 조건을 처리할 때 CASE문을 사용하라는 얘기는 아니며, 작성하는 코드 성격에 따라 어떤 문장을 사용할 것인지 판단하면 된다. CASE문 역시 IF문처럼 중첩으로 사용할 수 있다.