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를 사용하여 방식을 변경하므로 문제를 해결할 수 있다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
4 | [SQL] ORA-01723 해결안 | 우뽕 | 2020.01.21 | 3504 |
» | FOR LOOP 사용시 lower, upper limit에 대한 컨트롤 [1] | 명품관 | 2017.01.24 | 409 |
2 | Why use PL/SQL(PL/SQL – The right way) | 명품관 | 2016.08.31 | 1623 |
1 | 상관관계 Subquery의 경우 1 level 까지만 참조가 가능 | 명품관 | 2016.01.22 | 529 |
이 부분은 오라클 21c New Feature 기능 중 PL/SQL Extended Iteration 으로 이제 수월하게 커버할 수 있습니다.