Oracle 예제가 포함된 PL/SQL LOOP
⚡ 스마트 요약
PL/SQL 루프는 원하는 횟수만큼 코드의 일부를 반복적으로 실행합니다. PL/SQL은 기본 루프, FOR 루프, WHILE 루프를 제공하며, CONTINUE, EXIT, EXIT WHEN, GOTO 문을 사용하여 제어할 수 있습니다. 또한, 중첩된 구조를 깔끔하게 관리하기 위해 루프에 레이블을 지정할 수 있습니다.
루프란 무엇입니까?
반복문은 프로그램 코드의 특정 부분을 원하는 횟수만큼 실행할 수 있게 해줍니다. 이 튜토리얼에서는 PL/SQL에서의 반복문 개념과 반복문 내에서의 제어 흐름에 대해 살펴보겠습니다.
반복문 개념 소개
반복문 개념은 코딩에서 다음과 같은 이점을 제공합니다.
- 코드 재사용성.
- 코드 크기가 줄었습니다.
- 간편한 제어 흐름.
- 복잡성 감소.
아래 그림은 화장실을 보여줍니다.ping 개념.
위 다이어그램에서 반복 조건이 확인되고, 조건이 충족되는 한 실행 블록이 실행됩니다.
각 반복에서 루프 종료 조건을 결정하는 루프 카운터 변수가 변경됩니다. 어떤 경우에는 이 카운터가 미리 정의된 카운트만큼 증가하거나 감소하는 값을 가지며, 또 다른 경우에는 조건이 충족될 때까지 블록을 계속 실행하는 검색 조건을 가집니다.
루프 제어문
반복문 개념을 배우기 전에 반복문 제어문을 배우는 것이 중요합니다. 이 제어문들은 반복문 내부의 실행 흐름을 제어합니다.
계속
이 키워드는 PL/SQL 엔진에게 루프 내에서 CONTINUE를 만나면 실행 블록의 나머지 코드를 건너뛰고 즉시 다음 반복을 시작하도록 지시합니다. 이는 주로 특정 반복 횟수에 대해 루프 내부의 코드를 건너뛰어야 할 때 사용됩니다.
나가기 / 언제 나가기
이 키워드는 PL/SQL 엔진에게 현재 루프를 즉시 종료하도록 지시합니다. 중첩 루프에서 내부 루프의 'EXIT'는 외부 루프가 아닌 내부 루프만 종료합니다. 'EXIT WHEN' 뒤에는 부울 값을 반환하는 표현식이 옵니다. 결과가 TRUE이면 제어가 종료됩니다.
GOTO
이 명령문은 레이블이 지정된 명령문("GOTO ;")으로 제어를 넘깁니다. 이 명령문에는 다음과 같은 제약 조건이 있습니다.
- 제어권 이전은 서브프로그램 내에서만 수행할 수 있습니다.
- 예외 처리 부분에서 실행 부분으로 제어권을 이양할 수 없습니다.
이 구문은 다른 대안이 없는 경우를 제외하고는 사용하지 않는 것이 좋습니다. 코드 제어 때문입니다. trac제어권이 한 부분에서 다른 부분으로 이전될 때 안정성 확보가 매우 어려워집니다.
PL/SQL의 루프 유형
PL / SQL 다음과 같은 세 가지 유형의 루프를 제공합니다.
- 기본 루프문
- For 루프 문
- While 루프 문
아래 표는 기본 루프를 자세히 살펴보기 전에 세 가지 방식을 비교합니다.
| 고리 | 종료 기준 | 가장 잘 사용되는 경우 |
|---|---|---|
| 기본 루프 | 블록 내에서 명시적으로 종료합니다. | 종료는 고정된 횟수나 조건에 기반하지 않습니다. |
| FOR 루프 | 카운터가 범위 끝에 도달했습니다. | 반복 횟수는 미리 알려져 있습니다. |
| WHIE 루프 | 조건이 거짓이 됩니다 | 조건이 충족되는 동안 반복문이 실행되어야 합니다. |
기본 루프 문
이는 PL/SQL에서 가장 간단한 반복문 구조입니다. 실행 블록은 'LOOP' 키워드로 시작하고 'END LOOP'로 끝납니다. 루프를 종료하려면 실행 블록 내부에 종료 조건을 명시해야 하며, 'EXIT' 키워드를 반드시 사용해야 합니다.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
구문 설명:
- 'LOOP'라는 키워드는 반복문의 시작을 나타내고, 'END LOOP'는 반복문의 끝을 나타냅니다.
- 실행 블록에는 종료 조건을 포함하여 실행해야 하는 모든 코드가 포함되어 있습니다.
- 실행 부분에는 실행 가능한 모든 명령문이 포함될 수 있습니다.
참고 : EXIT 키워드가 없는 기본 반복문은 절대 멈추지 않는 무한 루프입니다.
예 1 : 이 예제에서는 기본적인 반복문을 사용하여 1부터 5까지의 숫자를 출력합니다.
DECLARE a NUMBER:= 1; BEGIN dbms_output.put_line('Program started.'); LOOP dbms_output.put_line(a); a:= a+1; EXIT WHEN a>5; END LOOP; dbms_output.put_line('Program completed'); END; /
Code 설명 :
- Code 2행: 변수 'a'를 'NUMBER'로 선언하고 '1'로 초기화합니다.
- Code 4행: "프로그램이 시작되었습니다"라는 메시지를 출력합니다.
- Code 5행: 'LOOP'라는 키워드는 반복문의 시작을 나타냅니다.
- Code 6행: 'a' 값을 인쇄합니다.
- Code 7행: 'a'의 값을 1만큼 증가시킵니다.
- Code 8행: 'a' 값이 5보다 큰지 확인합니다.
- Code 9행: 'END LOOP' 키워드는 실행 블록의 끝을 나타냅니다.
- 6행부터 8행까지는 'a'가 6에 도달할 때까지 계속 실행되며, 이때 조건이 TRUE를 반환하고 제어가 루프를 종료합니다.
- Code 10행: "프로그램이 완료되었습니다"라는 메시지를 출력합니다.
루프 라벨링
PL/SQL에서는 반복문에 레이블을 지정할 수 있습니다. 레이블은 "<<"와 ">>"로 묶어야 합니다. 특히 중첩된 반복문에 레이블을 지정하면 가독성이 향상됩니다. 레이블은 해당 반복문을 종료하는 EXIT 명령에 포함시킬 수 있으므로, 중첩된 구조에서 바깥쪽 반복문의 레이블을 지정하여 바로 바깥쪽 반복문을 종료할 수 있습니다.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
구문 설명:
- 바깥쪽 고리 안에는 또 다른 고리가 하나 더 있습니다.
- '< >'와 '< '>'는 이 루프들의 레이블입니다.
예 1 : 이 예제에서는 기본적인 반복문을 사용하여 1부터 시작하는 숫자를 출력합니다. 각 숫자는 해당 값만큼 출력됩니다. 출력할 숫자의 상한은 선언 부분에서 정해집니다. 이를 위해 레이블 개념을 사용합니다.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code 설명 :
- Code 2-3행: 변수 'a'와 'b'를 'NUMBER' 데이터 형식으로 선언합니다.
- Code 4행: 'upper_limit' 변수를 'NUMBER'라는 이름과 '4'라는 값으로 선언합니다.
- Code 6행: "프로그램이 시작되었습니다"라는 메시지를 출력합니다.
- Code 7행: 바깥쪽 루프에는 "outer_loop"라는 레이블이 붙어 있습니다.
- Code 9행: 'a'의 값은 1씩 증가합니다.
- Code 11행: 내부 루프는 "inner_loop"로 표시됩니다.
- Code 13행: 'a'가 'upper_limit' 값보다 큰지 확인하는 종료 조건입니다. 그렇지 않으면 다음 단계로 진행하고, 그렇지 않으면 외부 루프를 바로 종료합니다.
- Code 14행: 'b' 값을 인쇄합니다.
- Code 15행: 'b' 값을 1만큼 증가시킵니다.
- Code 16행: 'b'가 'a'보다 큰지 확인하는 종료 조건입니다. 만약 그렇다면, 내부 루프를 종료합니다.
- Code 19행: "프로그램이 완료되었습니다"라는 메시지를 출력합니다.







