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
<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
조건 <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;
/