PLSQL 제어문_CASE문
오라클 9i 이후 CASE문을 사용할 수 있는데 IF-THEN-ELSE 가능과 유사 합니다.
SIMPLE CASE문과 Searched CASE문으로 구별할 수 있는데 SIMPLE CASE문은 단일 표현식을 평가하고 그 결과를 일부 값과 비교합니다. SEARCHED CASE문은 여러 부울 식을 평가하고 TRUE로 평가되는 첫 번째 WHEN절의 THEN 이하를 실행합니다.
여러 부울 표현식의 결과를 기반으로 일련의 명령문을 실행하려는 경우 SEARCHED CASE 문을 사용하고 하나의 결과를 기반으로 일련의 명령문을 실행하려는 경우 SIMPLE CASE 문을 사용합니다.
아래 기본형식을 보면서 이해해 봅시다.
<Simple CASE문 기본형식>
CASE selector WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END CASE;
|
<Searched CASE문 기본형식>
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN [ELSE result] END CASE;
|
15.1.3.2.1 부서코드값을 비교하는 예제 실습 : SIMPLE CASE
익명코드 블록으로 EMP테이블에서 부서코드(deptno) 컬럼 값을 SIMPLE CASE문으로 비교하는 예제 입니다.
EMP 테이블에서 사번이 7369인 사원의 부서코드(deptno)가 10이면 accounting, 20이면 research, 30이면 sales를 출력하세요. |
SET SERVEROUTPUT ON; DECLARE -- EMP 테이블의 DEPTNO 컬럼과 타입이 같은 V_DEPTNO 변수를 선언 합니다. V_DEPTNO EMP.DEPTNO%TYPE; BEGIN -- BEGIN내의 SELECT문은 한건만 SELECT되야 하고 INTO절에서 받아줘야 합니다. SELECT DEPTNO INTO V_DEPTNO FROM EMP WHERE EMPNO = 7369;
CASE V_DEPTNO WHEN 10 THEN DBMS_OUTPUT.PUT_LINE('accounting...' || V_DEPTNO); WHEN 20 THEN ❶ DBMS_OUTPUT.PUT_LINE('research...' || V_DEPTNO); WHEN 30 THEN DBMS_OUTPUT.PUT_LINE('sales...' || V_DEPTNO); END CASE; END; |
<실행결과>
research...20
❶ 7369 SMITH 직원의 부서코드는 20 입니다. 그래서 WHEN 20 THEN이 실행되어 결과가 나왔습니다.
15.1.3.2.2 급여값을 비교하는 예제 실습 : SEARCHED CASE
익명코드 블록으로 EMP테이블에서 급여(sal) 컬럼 값을 SEARCHED CASE문으로 비교하는 예제 입니다.
EMP 테이블에서 사번이 7369인 사원의 급여(sal)가 3000보다 크면 'high sal' 2000보다 크면 'mid sal' 그 밖에는 'low sal'을 출력하세요. |
SET SERVEROUTPUT ON; DECLARE -- EMP 테이블의 SAL 컬럼과 타입이 같은 V_SAL 변수를 선언 합니다. V_SAL EMP.SAL%TYPE; BEGIN -- BEGIN내의 SELECT문은 한건만 SELECT되야 하고 INTO절에서 받아줘야 합니다. SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = 7369;
CASE WHEN V_SAL >= 3000 THEN DBMS_OUTPUT.PUT_LINE('high sal...' || V_SAL); WHEN V_SAL >= 2000 THEN DBMS_OUTPUT.PUT_LINE('mid sal...' || V_SAL); ELSE ❶ DBMS_OUTPUT.PUT_LINE('low sal...' || V_SAL); END CASE; END; |
<실행결과>
low sal...800
❶ 7369 SMITH 직원의 급여는 800 입니다. 그래서 ELSE 이하가 실행되어 결과가 나왔습니다.