SQL

[SQL 22] PL/SQL 제어문 (IF 문, CASE 문, LOOP 문, WHILE 문)

자바칩초코 2020. 6. 10. 13:30

절차적 언어인 PL/SQL은 다른 프로그래밍 언어에서 제공하는 다양한 처리문들을 포함하는데 이들을 통칭해 PL/SQL 제어문이라고 한다. 제어문에는 특정 조건에 맞을 때 처리하는 조건문, 반복 처리 시 사용하는 반복문, GOTO나 NULL과 같은 순차적 제어문이 있다.

 

1. IF문

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

 

기본구문

<조건이 1개일 경우>

 

<조건이 2개일 경우>

 

<조건이 n개일 경우>

 

IF 다음에 오는 조건 값이 TRUE이면 해당 조건 처리 문장이 실행된다. IF문의 용법은 프로그래밍 언어에 따라 조금씩 차이가 있는데 오라클에서는 조건 다음에는 THEN을 문장 맨 마지막에는 END IF를 써야한다.

조건이 1개 이상이면 ELSE 가 아닌 ELSE IF를 사용한다.

그럼 두 변수를 선언해 초기화한 뒤 둘 중 큰 수를 출력하는 로직을 IF문을 사용해 구현해 보자.

 

◈ 예제

 

 

 

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

 

 

 

 

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 구문을 사용한다.

 

 

2. CASE문

 

① 기본구문

 

② 기본구문

 

두 가지 유형으로 CASE문을 사용할 수 있다. 첫 번째는 CASE 다음에 바로 표현식을 두고 이 표현식 결과 값에 따라 WHEN… THEN에서 처리하는 유형이다.

두 번째 유형은 표현식 자체를 각각의 WHEN 다음에 두고 THEN 이하에서 처리하는데 보통 후자를 많이 사용한다. 그 이유는 WHEN 이하에서 다양한 표현식을 사용해 조건을 검색할 수 있기 때문이다.

급여에 따라 ‘높음’, ‘낮음’을 출력하는 IF문을 CASE문으로 변환해 보자.

 

 

◈ 예제

 

 

 

 

3. LOOP문

LOOP문은 루프를 돌며 반복해서 로직을 처리하는 반복문이다. 이러한 반복문에는 LOOP문 외에도 WHILE문, FOR문이 있는데, 먼저 가장 기본적인 형태의 반복문인 LOOP문에 대해 살펴 보자.

 

기본구문

 

LOOP문은 ‘LOOP … END LOOP;’ 형태로 사용한다. 반복문은 특정 조건을 만족할 때만 루프를 돌며 로직을 처리해야 하는데 LOOP문은 특정 조건이란 것이 없다. 그 대신 “이런 경우에 루프를 빠져 나가라” 라는 EXIT를 사용해 루프를 종료한다. 따라서 EXIT를 누락하면 무한루프에 빠지게 되니 사용할 때 주의해야 한다. 일반적으로 LOOP문에서는 IF문을 사용해 루프를 빠져나가는 조건을 걸기도 하지만, “EXIT WHEN 조건”을 사용해 WHEN절에서 명시한 조건에 맞을 때 빠져 나가라고 명시할 수 있다. 구구단 중 3단을 출력하는 익명 블록을 LOOP문을 사용해 구현해 보자.

 

 

◈ 예제

 

 

 

4. WHILE문

일반적인 프로그래밍 언어에서 대표적인 반복문을 꼽으라면 WHILE문과 FOR문을 들 수 있다. 오라클에서도 역시 이 두 문장을 제공하는데 먼저 WHILE문에 대해 살펴 보자.

 

기본구문

 

WHILE문은 LOOP문과 비슷하지만 WHILE 다음에 조건을 붙여 해당 조건에 만족할 때만 루프를 돌면서 로직을 처리한다. WHILE문을 사용해 구구단 3단을 출력해 보자.

 

◈ 예제

 

 

 

WHILE 다음에 조건 처리를 한 부분만 제외하면 다른 부분은 LOOP문과 같지만 LOOP문과 달리 vn_cnt 값이 9보다 작거나 같은 경우라는 조건을 주었다는 점을 눈여겨 보자. LOOP문에서는 루프를 빠져 나가는 조건을 주었지만 WHILE문에서는 루프를 수행하는 조건을 준 것이다.

WHILE문에서도 루프를 돌다가 특정 조건에 부합하면 EXIT를 써서 루프를 빠져나올 수 있다.