2021년 10월 16일 토요일

PLSQL 제어문_CASE문

 

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;


  • selector : 한번 평가되는 표현식으로 WHEN절에서 condition 값과 비교 됩니다.

  •  WHEN condition THEN result : selector 값이 condition과 같을 때 THEN 이하가 실행 됩니다.

  • ELSE result : selector와 일치하는 WHEN 조건이 없을 때 실행됩니다.

  • END : CASE문의 종료를 표시 합니다.

  • 조건이 만족할 때 아무것도 하지말라는 의미를 부여하려면 result 자리에 NULL 이라고 기술하면 됩니다.


<Searched  CASE문 기본형식>

CASE  

   WHEN condition1 THEN result1

   WHEN condition2 THEN result2

   ...

   WHEN conditionN THEN  resultN

   [ELSE result]

END CASE;


  • WHEN 절의 조건은 위에서 아래로 순서대로 평가됩니다.

  • 조건이 TRUE로 평가되는 WHEN 절과 연관된 일련의 명령문이 실행되고 둘 이상의 조건이 TRUE로 평가되면 첫 번째 조건 만 실행됩니다.

  • TRUE로 평가되는 조건이 없으면 ELSE 절의 [ELSE result]가 실행됩니다. ELSE 절을 생략되고 TRUE식이 없으면 CASE_NOT_FOUND 예외가 발생합니다.

  • 조건이 만족할 때 아무것도 하지말라는 의미를 부여하려면 result 자리에 NULL 이라고 기술하면 됩니다.


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 이하가 실행되어 결과가 나왔습니다.

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...