LOOP 문 — 반복 작업의 효율적인 수행
Oracle PL/SQL은 반복적인 데이터 처리를 자동화하기 위해 여러 가지 루프 구조를 제공합니다.
각 루프는 고유한 동작 방식과 사용 목적이 있으며, BEGIN...END 블록 내부에서만 사용할 수 있습니다.
중요:
모든 LOOP 구문은 반드시 BEGIN...END 블록 내에 있어야 합니다.
블록 외부에서 LOOP를 작성하면 컴파일 오류가 발생합니다.
이는 PL/SQL이 BEGIN...END 블록 단위를 기준으로 실행되기 때문입니다.
-- 올바른 예시
BEGIN
LOOP
-- 실행할 명령문
EXIT WHEN 조건;
END LOOP;
END;
/
-- 잘못된 예시 (오류 발생)
LOOP
-- 실행할 명령문
EXIT WHEN 조건;
END LOOP;
기본 LOOP — 가장 단순하고 유연한 반복 구조
LOOP 문은 종료 조건이 명시적으로 충족될 때까지 반복됩니다.
즉, 개발자가 직접 EXIT WHEN을 통해 루프 탈출 시점을 제어합니다.
반복 횟수가 동적이거나 조건이 복잡한 경우에 자주 사용됩니다.
LOOP
실행할_명령문;
EXIT WHEN 종료_조건;
END LOOP;
예제 1: 1부터 10까지 출력하기
DECLARE
v_num NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('현재 숫자: ' || v_num);
v_num := v_num + 1;
EXIT WHEN v_num > 10;
END LOOP;
END;
/
예제 2: 구구단 3단 출력하기
DECLARE
v_num NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('3 x ' || v_num || ' = ' || (3 * v_num));
v_num := v_num + 1;
EXIT WHEN v_num > 9;
END LOOP;
END;
/
특징 요약
- 종료 조건을 EXIT WHEN으로 명시해야 함
- 종료 조건을 적절히 설정하지 않으면 무한 루프 발생 가능
- 구조는 단순하지만 유연성이 높음
WHILE LOOP — 조건 기반의 반복
WHILE 루프는 조건이 참(TRUE)인 동안 반복을 수행합니다.
루프 진입 전 조건을 평가하기 때문에, 처음부터 거짓이라면 본문은 한 번도 실행되지 않습니다.
WHILE 조건 LOOP
실행할_명령문;
END LOOP;
예제: 1부터 5까지의 합 계산
DECLARE
v_sum NUMBER := 0;
v_num NUMBER := 1;
BEGIN
WHILE v_num <= 5 LOOP
v_sum := v_sum + v_num;
v_num := v_num + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('합계: ' || v_sum);
END;
/
특징 요약
- 반복 전에 조건 검사 → “선조건 루프”
- 조건이 처음부터 거짓이면 본문은 한 번도 실행되지 않음
- 루프 종료 조건이 명확할 때 적합
FOR LOOP — 정해진 횟수만큼의 반복
FOR 루프는 반복 횟수가 명확하게 정해져 있을 때 사용하는 구조입니다.
카운터 변수는 자동으로 선언되고, 루프가 끝나면 자동 소멸됩니다.
FOR i IN 시작값..끝값 LOOP
실행할_명령문;
END LOOP;
예제: 구구단 5단 출력
BEGIN
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE('5 x ' || i || ' = ' || (5 * i));
END LOOP;
END;
/
특징 요약
- 반복 횟수를 명시적으로 지정 가능
- 루프 제어 변수를 별도로 선언할 필요 없음
- REVERSE 키워드를 사용하면 역순 반복 가능
BEGIN
FOR i IN REVERSE 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('i = ' || i);
END LOOP;
END;
/
정리
루프 종류 반복 조건 종료 방식 특징
| 기본 LOOP | 명시적 종료 | EXIT WHEN | 가장 유연하지만 종료 조건을 직접 설정해야 함 |
| WHILE LOOP | 조건이 참일 때 | 조건이 거짓이 되면 종료 | 선조건 루프, 조건 기반 반복 |
| FOR LOOP | 지정된 횟수 | 자동 종료 | 카운터 자동 관리, 정해진 범위 반복 |
'DBMS > 개념' 카테고리의 다른 글
| 31_ 데이터베이스 성능 튜닝 정리 (0) | 2025.11.10 |
|---|---|
| 30_ 저장 프로시저(Stored Procedure) (0) | 2025.11.07 |
| 28_ Oracle 사용자 정의 함수 (0) | 2025.11.03 |
| 27_ DCL (Data Control Language) (0) | 2025.11.01 |
| 26_ 트리거(TRIGGER) 정리 (0) | 2025.10.30 |