IF문

    특정 조건에 따라 처리를 하는 것을 조건문이라 하는데 그 대표적인 것이 바로 IF 문이며 그 구조는 다음과 같다.

        <조건이 1개일 경우>
        IF 조건 THEN
           조건 처리;
        END IF;
         
        <조건이 2개일 경우>
        IF 조건 THEN
           조건 처리 1;
        ELSE
          조건 처리2;
        END IF;
         
        <조건이 n개일 경우>
        IF 조건1 THEN
           조건 처리1;
        ELSIF 조건2 THEN
          조건 처리2;
          ...
        ELSE
           조건 처리n;
        END IF;
    

    IF 다음에 오는 조건 값이 참, 즉 TRUE이면 해당 조건 처리 문장이 실행된다. IF문의 용법은 프로그래밍 언어에 따라 조금씩 차이가 있는데 오라클에서는 조건 다음에는 THEN을, 문장 맨 마지막에는 END IF를 명기해야 한다. 또한 조건이 1개 이상이면 ELSE IF가 아닌 ELSIF를 사용한다. 그럼 두 변수를 선언해 초기화한 뒤 둘 중 큰 수를 출력하는 로직을 IF문을 사용해 구현해 보자.

    입력

        DECLARE
          vn_num1 NUMBER := 1;
          vn_num2 NUMBER := 2 ;
        BEGIN
          IF vn_num1 >= vn_num2 THEN
             DBMS_OUTPUT.PUT_LINE(vn_num1 ||'이 큰 수');
          ELSE
             DBMS_OUTPUT.PUT_LINE(vn_num2 ||'이 큰 수');
          END IF;
        END;
    

    결과

        2이 큰 수
    

    vn_num2가 vn_num1보다 크므로 ELSE 부분으로 제어가 넘어가 실행된 것을 확인할 수 있다. 이번에는 조건이 여러 개인 IF문을 살펴 보자.

    입력

        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);
    
          IF vn_salary BETWEEN 1 AND 3000 THEN
             DBMS_OUTPUT.PUT_LINE('낮음');
          ELSIF vn_salary BETWEEN 3001 AND 6000 THEN
             DBMS_OUTPUT.PUT_LINE('중간');
          ELSIF vn_salary BETWEEN 6001 AND 10000 THEN
             DBMS_OUTPUT.PUT_LINE('높음');
          ELSE
             DBMS_OUTPUT.PUT_LINE('최상위');
          END IF;
        END;
    

    결과

        13000
        최상위
    

    앞의 익명 블록은 7장에서 샘플 데이터를 생성할 때 사용했던 DBMS_RANDOM 패키지를 사용해 10부터 120까지 숫자를 생성한 후 10의 자리(-1)에서 ROUND 처리를 해서 실행할 때마다 무작위로 10, 20, 30, … 120까지 수를 vn_department_id 변수에 할당한다. 이로 인해 이 PL/SQL 블록의 실행 결과는 실행할 때마다 달라질 것이다. 그리고 나서 이 변수 값에 해당하는 부서번호를 가진 사원을 무작위로 1명 선택해 급여를 가져와 vn_salary 변수에 넣어, IF 문을 사용해 범위에 맞게 출력하는 로직이다. 급여가 3000 이하이면 ‘낮음’, 3,001에서 6,000까지는 ‘중간’, 6,001에서 10,000까지는 ‘높음’, 그 이상은 ‘최상위’ 라는 텍스트를 출력하고 있다. 이처럼 여러 조건을 검토해 로직을 처리할 때는 IF~ELSIF~ELSE~END IF 구문을 사용한다.

    또한 IF문을 중첩해서 사용할 수도 있다. 중첩할 때는 가장 가까운 IF 조건에 따라 로직이 처리된다.

    입력

        DECLARE
          vn_salary NUMBER := 0;
          vn_department_id NUMBER := 0;
          vn_commission NUMBER := 0;
        BEGIN
          vn_department_id := ROUND(DBMS_RANDOM.VALUE (10, 120), -1);
    
           SELECT salary, commission_pct
             INTO vn_salary, vn_commission
             FROM employees
            WHERE department_id = vn_department_id
              AND ROWNUM = 1;
    
          DBMS_OUTPUT.PUT_LINE(vn_salary);
    
          IF vn_commission > 0 THEN
            IF vn_commission > 0.15 THEN
               DBMS_OUTPUT.PUT_LINE(vn_salary * vn_commission );
            END IF;
          ELSE
             DBMS_OUTPUT.PUT_LINE(vn_salary);
          END IF;
        END;
    

    결과

        6500
        6500
    

    위 익명 블록은 사원 테이블에서 커미션까지 가져와 커미션이 0보다 클 경우, 다시 조건을 걸어 커미션이 0.15보다 크면 ‘급여*커미션’ 결과를 출력하고, 커미션이 0보다 작으면 급여만 출력하고 있다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.