Oracle 예제가 포함된 PL/SQL LOOP

⚡ 스마트 요약

PL/SQL 루프는 원하는 횟수만큼 코드의 일부를 반복적으로 실행합니다. PL/SQL은 기본 루프, FOR 루프, WHILE 루프를 제공하며, CONTINUE, EXIT, EXIT WHEN, GOTO 문을 사용하여 제어할 수 있습니다. 또한, 중첩된 구조를 깔끔하게 관리하기 위해 루프에 레이블을 지정할 수 있습니다.

  • 🔁 목적 : 반복문은 코드 블록을 여러 번 실행하여 코드의 크기와 복잡성을 줄입니다.
  • 🧭 반복 횟수 카운터: 카운터 변수는 루프 조건을 결정하며, 루프가 종료되려면 이 변수의 값이 바뀌어야 합니다.
  • ⏭️ 계속하다: 현재 반복의 나머지 부분을 건너뛰고 다음 반복을 시작합니다.
  • 🚪 종료 / 종료 시점: 불리언 조건이 참일 경우, 선택적으로 루프를 즉시 종료합니다.
  • 🏷️ 레이블 : 이중 꺾쇠괄호 사이에 루프 레이블을 사용하면 EXIT가 외부 루프를 대상으로 지정할 수 있습니다.
  • ♾️ 기본 루프: 명시적인 종료 명령이 있을 때까지 실행되며, 종료 명령이 없으면 무한 루프에 빠집니다.
  • 🧩 세 가지 유형: 기본 반복문인 FOR 반복문과 WHILE 반복문은 일반적인 패턴을 다룹니다.

Oracle PL/SQL 루프

루프란 무엇입니까?

반복문은 프로그램 코드의 특정 부분을 원하는 횟수만큼 실행할 수 있게 해줍니다. 이 튜토리얼에서는 PL/SQL에서의 반복문 개념과 반복문 내에서의 제어 흐름에 대해 살펴보겠습니다.

반복문 개념 소개

반복문 개념은 코딩에서 다음과 같은 이점을 제공합니다.

  • 코드 재사용성.
  • 코드 크기가 줄었습니다.
  • 간편한 제어 흐름.
  • 복잡성 감소.

아래 그림은 화장실을 보여줍니다.ping 개념.

화장실ping PL/SQL에서의 개념 흐름

위 다이어그램에서 반복 조건이 확인되고, 조건이 충족되는 한 실행 블록이 실행됩니다.

각 반복에서 루프 종료 조건을 결정하는 루프 카운터 변수가 변경됩니다. 어떤 경우에는 이 카운터가 미리 정의된 카운트만큼 증가하거나 감소하는 값을 가지며, 또 다른 경우에는 조건이 충족될 때까지 블록을 계속 실행하는 검색 조건을 가집니다.

루프 제어문

반복문 개념을 배우기 전에 반복문 제어문을 배우는 것이 중요합니다. 이 제어문들은 반복문 내부의 실행 흐름을 제어합니다.

계속

이 키워드는 PL/SQL 엔진에게 루프 내에서 CONTINUE를 만나면 실행 블록의 나머지 코드를 건너뛰고 즉시 다음 반복을 시작하도록 지시합니다. 이는 주로 특정 반복 횟수에 대해 루프 내부의 코드를 건너뛰어야 할 때 사용됩니다.

나가기 / 언제 나가기

이 키워드는 PL/SQL 엔진에게 현재 루프를 즉시 종료하도록 지시합니다. 중첩 루프에서 내부 루프의 'EXIT'는 외부 루프가 아닌 내부 루프만 종료합니다. 'EXIT WHEN' 뒤에는 부울 값을 반환하는 표현식이 옵니다. 결과가 TRUE이면 제어가 종료됩니다.

GOTO

이 명령문은 레이블이 지정된 명령문("GOTO ;")으로 제어를 넘깁니다. 이 명령문에는 다음과 같은 제약 조건이 있습니다.

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

이 구문은 다른 대안이 없는 경우를 제외하고는 사용하지 않는 것이 좋습니다. 코드 제어 때문입니다. trac제어권이 한 부분에서 다른 부분으로 이전될 때 안정성 확보가 매우 어려워집니다.

PL/SQL의 루프 유형

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

아래 표는 기본 루프를 자세히 살펴보기 전에 세 가지 방식을 비교합니다.

고리 종료 기준 가장 잘 사용되는 경우
기본 루프 블록 내에서 명시적으로 종료합니다. 종료는 고정된 횟수나 조건에 기반하지 않습니다.
FOR 루프 카운터가 범위 끝에 도달했습니다. 반복 횟수는 미리 알려져 있습니다.
WHIE 루프 조건이 거짓이 됩니다 조건이 충족되는 동안 반복문이 실행되어야 합니다.

기본 루프 문

이는 PL/SQL에서 가장 간단한 반복문 구조입니다. 실행 블록은 'LOOP' 키워드로 시작하고 'END LOOP'로 끝납니다. 루프를 종료하려면 실행 블록 내부에 종료 조건을 명시해야 하며, 'EXIT' 키워드를 반드시 사용해야 합니다.

PL/SQL의 기본 반복문 구조

LOOP
<execution block starts>
<EXIT condition based on developer criteria>
<execution_block_ends>
END LOOP;

구문 설명:

  • 'LOOP'라는 키워드는 반복문의 시작을 나타내고, 'END LOOP'는 반복문의 끝을 나타냅니다.
  • 실행 블록에는 종료 조건을 포함하여 실행해야 하는 모든 코드가 포함되어 있습니다.
  • 실행 부분에는 실행 가능한 모든 명령문이 포함될 수 있습니다.

참고 : EXIT 키워드가 없는 기본 반복문은 절대 멈추지 않는 무한 루프입니다.

예 1 : 이 예제에서는 기본적인 반복문을 사용하여 1부터 5까지의 숫자를 출력합니다.

기본 루프 인쇄 숫자 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부터 시작하는 숫자를 출력합니다. 각 숫자는 해당 값만큼 출력됩니다. 출력할 숫자의 상한은 선언 부분에서 정해집니다. 이를 위해 레이블 개념을 사용합니다.

레이블이 지정된 루프 예제 1부레이블이 지정된 루프 예제 2부

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행: "프로그램이 완료되었습니다"라는 메시지를 출력합니다.

자주 묻는 질문

EXIT는 무조건 루프를 종료합니다. EXIT WHEN은 뒤따르는 부울 표현식이 참일 때만 루프를 종료하므로, 일반 EXIT를 별도의 IF 문으로 감쌀 필요가 없습니다.

레이블을 사용하면 내부 루프의 EXIT 문이 이름이 지정된 외부 루프를 한 단계 만에 빠져나올 수 있습니다. 또한 중첩된 코드를 훨씬 읽기 쉽게 만들어 줍니다. trac킹 플레인 END LOOP 문.

블록에 EXIT 조건이 없거나 카운터가 종료 조건에 도달하지 않으면 루프가 멈추지 않습니다. 카운터가 항상 EXIT WHEN 조건으로 향하도록 하십시오.

네, 종종 그렇습니다. AI는 trac카운터가 EXIT 조건으로 이동하는지 여부를 확인하고, 루프에 도달 가능한 종료 지점이 없을 경우 경고합니다. 단, 데이터에 따라 달라지는 종료 지점의 경우 확인을 위해 테스트 실행이 필요합니다.

CONTINUE는 현재 반복의 나머지 부분을 건너뛰고 다음 반복으로 넘어갑니다. 루프를 완전히 종료하지 않고 특정 값을 무시해야 할 때 유용합니다.

이 게시물을 요약하면 다음과 같습니다.