오라클 PL/SQL에서 조건선택문에 대해 알아보도록 합시다! 조건 선택으로 사용하는 문법은 크게 두 개가 있으며 각각 if 문, 그리고 case 문입니다. 두 가지 조건문을 사용하는 방법에 대해 설명해드릴 텐데요, 우선 if 의 사용 방법부터 안내해 드리도록 하겠습니다.
오라클 IF 문
IF 의 사용과 관련하여 핵심적으로 알아야 할 내용은 다음의 3가지입니다. 각각에 대해 살펴보겠습니다.
- IF THEN
- IF THEN ELSE
- IF THEN ELSIF
IF THEN
IF THEN 구문은 가장 기본적인 조건선택문입니다. 주어진 조건이 참일 때, 실행할 블록을 정의합니다. 다음은 x가 5보다 클 때 메시지를 출력하도록 하는 예제 자료입니다.
DECLARE
x NUMBER := 10;
BEGIN
IF x > 5 THEN
DBMS_OUTPUT.PUT_LINE('x는 5보다 큽니다.');
END IF;
END;
/
x는 5보다 큽니다.
PL/SQL procedure successfully completed.
IF THEN ELSE
IF THEN ELSE 구문은 조건이 참일 때와 아닐 때에 대한 두 가지 블록을 정의할 수 있습니다. 다음 예제는 5보다 큰 경우, 그리고 그외의 경우인 5보다 작거나 같은 경우를 정의해 보았습니다.
DECLARE
x NUMBER := 3;
BEGIN
IF x > 5 THEN
DBMS_OUTPUT.PUT_LINE('x는 5보다 큽니다.');
ELSE
DBMS_OUTPUT.PUT_LINE('x는 5보다 작거나 같습니다.');
END IF;
END;
/
x는 5보다 작거나 같습니다.
PL/SQL procedure successfully completed.
IF THEN ELSIF
IF THEN ELSIF 구문은 여러 조건을 검사하고, 참에 해당하는 첫 번째 조건의 블록을 실행합니다. 여러 조건이 참이 될 수 있으므로, 실행하려는 블록의 우선순위를 잘 결정하여 위에서부터 차례대로 내려가 주세요.
DECLARE
x NUMBER := 15;
BEGIN
IF x > 10 THEN
DBMS_OUTPUT.PUT_LINE('x는 10보다 큽니다.');
ELSIF x > 5 THEN
DBMS_OUTPUT.PUT_LINE('x는 5보다 큽니다.');
ELSE
DBMS_OUTPUT.PUT_LINE('x는 5보다 작거나 같습니다.');
END IF;
END;
/
x는 10보다 큽니다.
PL/SQL procedure successfully completed.
사용법은 아래의 예시에서 안내해드리겠습니다.
SET SERVEROUTPUT ON
DECLARE
BOOL BOOLEAN := TRUE;
NUM NUMBER := 10;
BEGIN
--IF THEN
IF BOOL
THEN
--BOOL = TRUE 와 BOOL 은 동일합니다. ( = TRUE 는 생략할 수 있습니다. )
DBMS_OUTPUT.PUT_LINE ('BOOL');
END IF;
--IF THEN ELSE
IF BOOL = FALSE
THEN
DBMS_OUTPUT.PUT_LINE ('BOOL = FALSE');
ELSE
DBMS_OUTPUT.PUT_LINE ('BOOL = TRUE');
END IF;
--IF THEN ELSIF
IF NUM >= 9
THEN
--[NUM] 이 10 이기에 이 분기를 진행하며 6이상, 3이상 부분을 수행하지 않습니다. IF 순서를 신경 쓰세요.
DBMS_OUTPUT.PUT_LINE ('NUM >= 9');
ELSIF NUM >= 6
THEN
DBMS_OUTPUT.PUT_LINE ('NUM >= 6');
ELSIF NUM >= 3
THEN
DBMS_OUTPUT.PUT_LINE ('NUM >= 3');
ELSE
DBMS_OUTPUT.PUT_LINE ('ELSE');
END IF;
END;
/
오라클 CASE 문
CASE 문 또한 조건을 분기하여 실행할 블록을 제공하는 역할을 합니다. 케이스 문은 크게 2가지로 분류할 수 있습니다.
- 단순 CASE (SIMPLE CASE)
- 검색 CASE (SEARCHED CASE)
WHEN 부분에 모든 조건을 기술하느냐, 선택을 하느냐의 차이입니다. 케이스문에 대한 설명을 추가 문서를 작성하여 보완하도록 하겠습니다. 😊
SET SERVEROUTPUT ON
DECLARE
BOOL BOOLEAN := TRUE;
NUM NUMBER := 10;
BEGIN
--SIMPLE CASE STATEMENT
CASE NUM
WHEN 1
THEN
DBMS_OUTPUT.PUT_LINE ('NUM is 1');
WHEN 5
THEN
DBMS_OUTPUT.PUT_LINE ('NUM is 5');
ELSE
DBMS_OUTPUT.PUT_LINE ('ELSE');
END CASE;
--SEARCH CASE STATEMENT
CASE
WHEN NUM = 100
THEN
DBMS_OUTPUT.PUT_LINE ('NUM = 100');
WHEN BOOL
THEN
DBMS_OUTPUT.PUT_LINE ('BOOL is true');
--ELSE 생략 가능합니다.
END CASE;
END;
/