본문 바로가기
DATABASE/ORACLE

[PL/SQL] 무작정 시작하기 (2) - IF 조건문

by 허도치 2020. 1. 13.

2020/01/13 - [DATABASE/ORACLE] - [PL/SQL] 무작정 시작하기 (1) - PL/SQL 이란?

 

 

  이전 포스트에서 PL/SQL에 대해서 간략하게 알아보고 예제를 만들어 보았다. 이번 포스트에서는 PL/SQL의 특징 중 하나인 조건문에 대해서 알아보려고 한다. 프로그래밍을 해본 사람이라면 쉽게 이해할 수 있을 것이라고 생각된다.

 

 

1. 기본 구조.

   1-1. IF ~ ELSIF ~ ELSE ~ END.

1
2
3
4
5
6
7
IF 조건식 THEN
 
[ ELSIF 조건식 THEN ]
 
ELSE
 
END IF
cs

         - 조건식이 참인 경우 THEN 영역의 작업이 수행됨.

         - 다중IF문이 다른 프로그래밍 언어처럼 ELSE IF가 아니라 ELSIF이므로 잘 확인하길 바람.

         - ELSE에는 THEN 영역이 없음.

         - 조건문 블록이 종료될 때는 END IF라고 명시 해주어야 함.

 

 

2. PL/SQL 조건문의 특징.

   2-1. CASE ~ WHEN문과 비교해보면 단순히 키워드만 다름.

 

   2-2. 동등비교를 할 때, 등호가 1개만 사용됨.

         ( O ) IF 1 = 1 THEN 

         ( X ) IF 1 == 1 THEN 

 

   2-3. 논리연산자는 기호 대신 AND, OR 키워드 사용.

         ( O ) IF 1 = 1 AND 2 = 2 THEN 

         ( X ) IF 1 = 1 && 2 = 2 THEN          

 

   2-4. 특정값이 포함되어 있는지 확인할 때 IN 키워드 사용.

         - IF 1 IN ( 1, 2, 3, 4, 5 ) THEN

 

   2-5. 부정식에는 != 또는 NOT 키워드 사용.

         예) IF 1 != 2 AND NOT 2 = 1 AND 3 NOT IN ( 1, 2, 4, 5 ) THEN 

 

 

3. PL/SQL 조건문 예제.

   3-1. DEPTNO가 10인 부서의 지역을 확인하여 'NEW YORK'이면 'KOREA'로 변경하고, 'KOREA'이면 'NEW YORK'으로 하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--실행 결과를 출력하도록 설정
SET SERVEROUTPUT ON
 
--스크립트 경과 시간을 출력하도록 설정
SET TIMING ON
 
DECLARE
--변수를 정의하는 영역
    
    V_ROW_DATA      SCOTT.DEPT%ROWTYPE;
    V_RESULT_MSG    VARCHAR2(500);
 
BEGIN
--작업 영역
    
    --조회
    SELECT T1.DEPTNO
         , T1.DNAME
         , T1.LOC
      INTO V_ROW_DATA
      FROM SCOTT.DEPT T1
     WHERE T1.DEPTNO = 10
    ;
    
    IF UPPER(V_ROW_DATA.LOC) = 'NEW YORK' THEN
        UPDATE SCOTT.DEPT T1
           SET T1.LOC = 'KOREA'
         WHERE T1.LOC = 'NEW YORK'
        ;        
        V_RESULT_MSG := '근무지가 NEW YORK에서 KOREA로 변경되었습니다.';
    ELSIF UPPER(V_ROW_DATA.LOC) = 'KOREA' THEN
        UPDATE SCOTT.DEPT T1
           SET T1.LOC = 'NEW YORK'
         WHERE T1.LOC = 'KOREA'
        ;        
        V_RESULT_MSG := '근무지가 KOREA에서 NEW YORK으로 변경되었습니다.';
    ELSE
        V_RESULT_MSG := '근무지는 NEW YORK이 아닙니다.';
    END IF;
    
    COMMIT;
    
    --조회 결과 출력
    DBMS_OUTPUT.PUT_LINE( V_RESULT_MSG );
 
END
;
--작업 종료
cs

         - 10 ln: %ROWTYPE은 DEPT테이블의 컬럼 속성을 사용하며 한 개 이상의 컬럼을 담을 수 있음.

         - 17~22 ln: 부서정보 조회.

         - 25 ln: 근무지(LOC)을 대문자로 변환하여 'NEW YORK'과 비교.

         - 26~30 ln: 조건이 참이면 UPDATE를 수행.

         - 31 ln: 근무지(LOC)을 대문자로 변환하여 'KOREA'와 비교.

         - 32~36 ln: 조건이 참이면 UPDATE를 수행.

         - 41 ln: UPDATE를 반영하기 위해 COMMIT.

 

 

4. 마치며.

   - PL/SQL에서 조건문은 더 설명할 내용이 없을것 같다. 단순히 값을 비교하여 분기시키는 것이기 때문에 어렵지않게 학습할 수 있을 것이다. 또, 'CASE WHEN'문을 알고 있다면 더더욱 쉽게  익힐 수 있을 것이다.

   - 다음 포스트에서는 CURSOR를 이용한 반복문(LOOP)을 다루어 볼것이다.

 

 

 

댓글