메뉴 건너뛰기

Korea Oracle User Group

PL/SQL

FOR LOOP 사용시 lower, upper limit에 대한 컨트롤

 

For loop를 사용하면서 loop 횟수에 대한 컨트롤을 위해 lower, upper limit에 대한 변경을 loop 내에서 하려는 코드를 사용하기도 한다.

하지만 이럴 경우 의도치 않은 결과를 종종 만나게 된다.

 

아래는 흔히 구사하게 되는 실수 예제이다.

 

DECLARE
  LOWERL NUMBER:= 1;
  UPPERL NUMBER:= 3;
  NUM    VARCHAR2(10);
BEGIN
  FOR I IN LOWERL..UPPERL
  LOOP
    NUM     :=NUM||TO_CHAR(LOWERL);
    IF I     =3 THEN
      UPPERL:=5;
    END IF;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(NUM);
END;
/

 

위 코드의 의도는 Loop 내에서 upper limit을 조정하고자 하는 것이다.
하지만 PL/SQL의 경우 Loop 시작시 lower, upper limit을 최초 한번 읽고 다시 읽어 들이지 않기 때문에
위의 코드로는 lower, upper limit에 대해서 컨트롤을 할 수 없다.

 

forr loop를 아래와 같이 고쳐서 사용하면 문제는 해결된다.

 

DECLARE
  LOWERL NUMBER:= 1;
  UPPERL NUMBER:= 3;
  NUM    VARCHAR2(10);
  I PLS_INTEGER := 0;
BEGIN
  LOOP
    I       := I + 1;
    NUM     :=NUM||TO_CHAR(LOWERL);
    IF I     =3 THEN
      UPPERL:=5;
    END IF;
    EXIT
  WHEN I = UPPERL;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(NUM);
END;
/

 

for loop를 사용할 경우 lower, upper limit에 대한 컨트롤로 loop 횟수를 조정할 수 없게 된다.

하지만 loop~exit를 사용하여 방식을 변경하므로 문제를 해결할 수 있다.

 

 

위로