[ORACLE] PL/SQL 반복문(Loop statements : Control Statements) [오라클]

Basic LOOP

BASIC LOOP

[EXIT], [EXIT WHEN] 으로 중단하거나 [CONTINUE], [CONTINUE WHEN] 으로 다음 반복을 진행하기까지 <statements>를 되풀이합니다.

--syntax
LOOP
  statements
END LOOP;
SET SERVEROUTPUT ON

DECLARE
   NCNT   NUMBER := 0;
BEGIN
   --기본 반복 입니다. EXIT 문을 통해 바로 종료할 수 있습니다. (그런데 반복이 1회이므로 의미 없기에 사용하지는 않습니다)
   LOOP
      DBMS_OUTPUT.PUT_LINE ('BASIC LOOP : ' || NCNT);
      NCNT := NCNT + 1;

      IF NCNT = 3
      THEN
         EXIT;
      END IF;
   END LOOP;

   DBMS_OUTPUT.PUT_LINE ('----------');
   NCNT := 0;

   LOOP
      EXIT WHEN NCNT = 3;
      NCNT := NCNT + 1;
      DBMS_OUTPUT.PUT_LINE ('BASIC LOOP(EXIT WHEN) : ' || NCNT);
   END LOOP;
END;
/

FOR LOOP

FOR LOOP

<index> 변수를 lower_bound 부터 upper_bound 까지 반복합니다. [REVERSE] 는 역순으로 반복하도록 합니다. 이때에도 lower_bound < upper_bound 여야 합니다. 커서(cursor)의 %NOTFOUND 기능과 함께 사용하는 경우가 많습니다. (Cursor FOR LOOP)

--syntax
FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP
  statements
END LOOP;
SET SERVEROUTPUT ON

DECLARE
BEGIN
   --반복변수(예시변수는 INDEXVAR)를 선언부에서 정의할 필요가 없습니다
   FOR INDEXVAR IN 1 .. 3
   LOOP
      DBMS_OUTPUT.PUT_LINE ('FOR LOOP ' || INDEXVAR);
   END LOOP;

   --PLS-00201: 'INDEXVAR' 식별자가 정의되어야 합니다
   --DBMS_OUTPUT.PUT_LINE ('FOR LOOP ' || INDEXVAR);

   --거꾸로 진행합니다
   DBMS_OUTPUT.PUT_LINE ('----------');

   FOR INDEXVARREVERSE IN REVERSE 1 .. 3
   LOOP
      DBMS_OUTPUT.PUT_LINE ('FOR LOOP REVERSE ' || INDEXVARREVERSE);
   END LOOP;
END;
/

WHILE LOOP

WHILE LOOP

조건 <condition> 이 참인 경우 반복합니다.

--syntax
WHILE condition LOOP
  statements
END LOOP;
SET SERVEROUTPUT ON

DECLARE
   BOOL   BOOLEAN := FALSE;
BEGIN
   WHILE BOOL
   LOOP
      DBMS_OUTPUT.PUT_LINE (
         '도달 할 수 없습니다.(BOOL은 FALSE 입니다.) BASIC LOOP가 최소 1회 실행을 보장하는데 반해 WHILE 은 그렇지 않습니다.');
      --할당 불가합니다. BOOL은 FALSE 입니다.
      BOOL := TRUE;
   END LOOP;

   DBMS_OUTPUT.PUT_LINE ('----------');

   WHILE NOT BOOL
   LOOP
      DBMS_OUTPUT.PUT_LINE ('IS NOT BOOL? TRUE!');
      BOOL := TRUE;
   END LOOP;
END;
/

댓글