Oracle 예제가 포함된 PL/SQL LOOP

루프란 무엇입니까?

루프를 사용하면 프로그램 코드의 특정 부분을 원하는 횟수만큼 실행할 수 있습니다.

이 튜토리얼에서는 PL/SQL의 루프 개념과 루프의 제어 흐름을 살펴보겠습니다.

루프 개념 소개

루프 개념은 코딩에 다음과 같은 이점을 제공합니다.

  • 코드의 재사용 성
  • 코드 크기 감소
  • 쉬운 제어 흐름
  • 복잡성 감소

아래 다이어그램은 루핑 개념을 그림으로 보여줍니다.

Oracle PL/SQL 루프

위 다이어그램에서는 루프 조건을 확인하고 루프 조건이 만족되는 한 실행 블록이 실행됩니다.

각 반복에서 실제로 루프 조건을 결정하는 루프 카운터 변수는 루프에서 제어를 종료하도록 수정해야 합니다. 어떤 경우에는 이 루프 카운터 변수가 미리 정의된 카운트에 대한 증가/감소 연산자이고, 어떤 경우에는 블록을 충족할 때까지 계속 실행하는 검색 조건입니다.

루프 제어문

루프 개념을 배우기 전에 루프 제어문에 대한 학습은 필수입니다. 루프 제어 문은 루프 내부의 실행 흐름을 실제로 제어하는 ​​문입니다. 다음은 루프 제어문에 대한 자세한 설명입니다.

계속

이 키워드는 PL/SQL 엔진이 루프 내에서 이 키워드를 발견할 때마다 코드 실행 블록의 나머지 코드를 건너뛰고 다음 반복이 즉시 시작된다는 명령을 PL/SQL 엔진에 보냅니다. 이는 루프 내부의 코드를 특정 반복 값에 대해 건너뛰려는 경우 주로 사용됩니다.

나가기 / 언제 나가기

이 키워드는 PL/SQL 엔진이 이 키워드를 발견할 때마다 현재 루프를 즉시 종료한다는 명령을 PL/SQL 엔진에 보냅니다. PL/SQL 엔진이 중첩 루프에서 EXIT를 발견하면 정의된 루프에서 나옵니다. 즉, 중첩 루프에서 내부 루프에 EXIT를 지정하면 내부 루프에서만 제어가 종료되지만 외부 루프가 아닙니다. 'EXIT WHEN' 뒤에는 부울 결과를 제공하는 표현식이 옵니다. 결과가 TRUE이면 컨트롤이 종료됩니다.

GOTO

이 문장은 제어를 레이블이 지정된 문장(“GOTO ;”)으로 전송합니다. 여기에는 다음과 같은 제한이 있습니다.

  • 제어권 이전은 서브프로그램 내에서만 수행할 수 있습니다.
  • 예외 처리 부분에서 실행 부분으로 제어권을 넘길 수 없습니다.

다른 대안이 없는 한 이 명령문을 사용하지 않는 것이 좋습니다. 한 부분에서 다른 부분으로 제어가 이전되기 때문에 프로그램에서 코드 제어 추적이 매우 어렵기 때문입니다.

PL/SQL의 루프 유형

PL / SQL 다음 세 가지 유형의 루프를 제공합니다.

기본 루프 문

이 루프 문은 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 조건을 포함하여 실행해야 하는 모든 코드가 포함되어 있습니다.
  • 실행 부분에는 모든 실행 문이 포함될 수 있습니다.

참고 : EXIT 키워드가 없는 기본 루프 문은 결코 멈추지 않는 INFINITE-LOOP가 됩니다.

예제 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:
/

코드 설명 :

  • 코드 라인 2: 변수 'a'를 'NUMBER' 데이터 타입으로 선언하고 값 '1'로 초기화합니다.
  • 코드 라인 4: "프로그램 시작됨"이라는 문구를 인쇄합니다.
  • 코드 라인 5: 키워드 'LOOP'는 루프의 시작을 표시합니다.
  • 코드 라인 6: 'a' 값을 인쇄합니다.
  • 코드 라인 7: 'a' 값을 +1만큼 증가시킵니다.
  • 코드 라인 8: 'a' 값이 5보다 큰지 확인합니다.
  • 코드 라인 9: 'END LOOP' 키워드는 실행 블록의 끝을 표시합니다.
  • 6행부터 8행까지의 코드는 'a'가 값 6에 도달할 때까지 계속 실행됩니다. 조건이 TRUE를 반환하고 컨트롤이 루프에서 종료되기 때문입니다.
  • 코드 라인 10: "프로그램 완료" 문구 인쇄

루프 라벨링

PL/SQL에서는 루프에 레이블을 지정할 수 있습니다. 레이블은 "<<"와 ">>" 사이에 있어야 합니다. 특히 중첩된 루프 코드에서 루프에 레이블을 지정하면 가독성이 높아집니다. 특정 루프를 종료하기 위해 EXIT 명령에 레이블을 지정할 수 있습니다. 레이블을 사용하면 종료 명령과 외부 루프 레이블을 제공하여 루프 내부의 어느 위치에서든 중첩 루프의 외부 루프를 직접 종료하도록 제어할 수 있습니다.

루프 라벨링

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

구문 설명:

  • 위 구문에서 out 루프에는 내부에 루프가 하나 더 있습니다.
  • '< >' 그리고 '< >'는 이러한 루프의 레이블입니다.

예제 1: 이 예제에서는 Basic 루프 문을 사용하여 1부터 시작하는 숫자를 인쇄합니다. 각 숫자는 값만큼 여러 번 인쇄됩니다. 시리즈의 상한은 프로그램 선언 부분에서 고정됩니다. 이를 달성하기 위해 레이블 개념을 사용하는 방법을 알아보겠습니다. 이를 위해 다음 코드를 실행합니다.

루프 라벨링루프 라벨링

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

코드 설명 :

  • 코드 라인 2-3: 변수 'a'와 'b'를 'NUMBER' 데이터 유형으로 선언합니다.
  • 코드 라인 4: 'upper_limit' 변수를 값 '4'의 'NUMBER' 데이터 유형으로 선언
  • 코드 라인 6: "프로그램 시작됨"이라는 문구를 인쇄합니다.
  • 코드 라인 7: 외부 루프는 "outer_loop"로 표시되었습니다.
  • 코드 라인 9: 'a'의 값은 1씩 증가합니다.
  • 코드 라인 11: 내부 루프는 "inner_loop"로 표시되었습니다.
  • 코드 라인 13: 'a' 값이 'upper_limit' 값보다 큰지 확인하는 EXIT 조건입니다. 그렇지 않다면 더 나아가고, 그렇지 않으면 외부 루프를 직접 종료합니다.
  • 코드 라인 14: 'b' 값을 인쇄합니다.
  • 코드 라인 15: 'b' 값을 +1만큼 증가시킵니다.
  • 코드 라인 16: 'b'의 값이 'a'보다 큰지 확인하는 EXIT 조건입니다. 그렇다면 내부 루프에서 제어를 종료합니다.
  • 코드 라인 14: "프로그램 완료" 문구 인쇄

요약

고리 기본 루프
종료 기준 실행 부분에서 'EXIT' 키워드를 만나면 종료합니다.
용법 특정 조건에 따라 종료되지 않을 때 사용하면 좋습니다.