오라클 FOR IN LOOP - olakeul FOR IN LOOP

다른언어와 마찬가지로 PL/SQL에서도 반복문을 지원합니다. PL/SQL에서의 반복문 종류는 LOOP문, WHILE문, FOR문이 있습니다.

LOOP문

--사용법 LOOP 처리문; EXIT[조건]; END LOOP;--예제 DECLARE NUM1 NUMBER :=1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE(NUM1); --출력 NUM1 := NUM1+1; --NUM = NUM +1 EXIT WHEN NUM1 >10; --NUM1이 10보다 크면 LOOP종료 END LOOP; END;

LOOP문 사용법은 위와같습니다. 반복문은 특정조건까지만 반복하며 로직을 수행하는데 LOOP의 반복문은 EXIT[WHEN 조건]; 이라는 구절에서 실행됩니다. 따라서 EXIT를 누락하면 해당 LOOP는 무한루프에 빠지게 되니 사용하실 때 주의하셔야 합니다.

WHILE문

--사용법 WHILE 조건 LOOP 처리문; END LOOP;--예제 DECLARE NUM1 NUMBER :=1; BEGIN WHILE(NUM1<10) --NUM이 10보다 작을때까지 LOOP실행 LOOP DBMS_OUTPUT.PUT_LINE(NUM1); --출력 NUM1 := NUM1+1; --NUM = NUM +1 END LOOP; END;

WHILE문은 조건문이 WHILE 다음으로 조건이 갔다는 부분에서만 다르고 나머지는 LOOP와 같습니다. WHILE문에서도 LOOP처럼 EXIT를 써서 루프를 빠져나가는 방법도 사용할 수 있습니다.

FOR문

--사용법 FOR 증감변수 IN 초기값..최종값 LOOP 처리문; END LOOP;BEGIN FOR I IN 1..9 LOOP DBMS_OUTPUT.PUT_LINE('안녕하세요'); --출력 END LOOP; END;

FOR문은 인덱스값을 DECLARE에서 선언하지 않아도 되므로 가장 반복문중에서 가장 간결하게 사용할 수 있습니다. 인덱스 값은 초기값에서 시작해 최종값까지 1씩 증가하게 되며 인덱스는 참조는 가능하지만 변경을 할 수는 없습니다. FOR문에 REVERSE를 명시해주면 FOR문이 거꾸로 시작합니다. (EX : FOR I IIN REVERSE 1..9)

안녕하세요, 끙정입니다.

오늘은 반복문에 대해서 알아보겠습니다.

프로그래밍 언어에서 반복문은 FOR문과 WHILE문이 있습니다.

하나씩 간단하게 알아보겠습니다.

1. WHILE문

WHILE문은 조건이 참인 동안에 루프 내부의 명령을 반복 실행하는 것입니다.

따라서 루프에는 조건의 진위 여부를 변경하는 명령이 반드시 있어야 합니다.

그렇지 않으면 루프를 탈출할 수 없어 무한 루프가 됩니다.

WHILE 조건 LOOP 명령 END LOOP;

WHILE 조건문을 선언해준 후, LOOP를 열고 명령을 내리고 END LOOP로 루프를 닫아줍니다.

1부터 100까지 합계를 구하는 반복문 코드를 작성해보겠습니다.

DECLARE v_num INT := 1; v_total INT := 0; BEGIN WHILE v_num <= 100 LOOP v_total := v_total + v_num; v_num := v_num + 1; END LOOP; DBMS_OUTPUT.PUT_LINE('1~100까지의 합산 결과 = ' || v_total); END;

v_num과 v_total을 각각 1과 0으로 초기화하고,

WHILE 조건문으로 v_num이 100보다 작으면, 이라고 해주었습니다.

즉, v_num이 100보다 적으면 LOOP가 돌아가고, 100이 초과되면 루프가 종료됩니다.

WHILE 반복문은 루프 내부에서 조건을 언제 변경하는가에 따라 반복 횟수가 가변적입니다.

따라서 반복 횟수를 모르고 조건을 알 때는 WHILE문이 적절합니다.

WHILE문의 조건식 자리에 1=1 같이 항상 참인 비교식을 쓰면 무한히 반복합니다.

그러나 진짜로 무한히 반복하면 끝이 없으니 특정 조건을 만족할 때 루프를 탈출하는 코드가 필요합니다.

루프 내에서 흐름을 제어할 때는 EXIT, CONTINUE 명령을 사용합니다.

EXIT는 루프를 탈출, CONTINUE는 루프의 선두로 돌아갑니다.

DECLARE v_num INT := 1; v_total INT := 0; BEGIN WHILE 1 = 1 LOOP v_total := v_total + v_num; v_num := v_num + 1; IF v_num > 100 THEN EXIT; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE('1~100까지의 합산 결과 = ' || v_total); END;

WHILE 1 = 1 로 TRUE 조건을 만들고 무한 반복합니다.

IF 문으로 v_num에 대한 조건을 통해 EXIT로 탈출합니다.

2. FOR

FOR문은 WHILE문과는 다르게 미리 지정한 범위를 반복하는 형식이며 애초에 반복 횟수가 정해져있습니다.

따라서 100까지의 합산에는 FOR문이 더 적합합니다.

FOR 변수 IN [REVERSE] 시작..끝 LOOP 명령 END LOOP;

변수를 시작 값으로 초기화하고 계속 1씩 증가하며 끝 값에 이를 때까지 루프를 반복합니다.

REVERSE 범위를 지정하면 끝 값에서 시작 값으로 역방향으로 순회합니다.

DECLARE v_total INT := 0; BEGIN FOR v_num IN 1..100 LOOP v_total := v_total + v_num; END LOOP; DBMS_OUTPUT.PUT_LINE('1~100까지의 합산 결과 = ' || v_total); END;

미리 정해진 범위를 밝힐 수 있어 간편하지만 1씩 증감하는 값만 가능해 범용성이 조금 떨어집니다.

FOR문의 IN절에 테이블을 조회하는 쿼리문을 적으면 이 테이블을 순회합니다.

BEGIN FOR v_cities IN (SELECT * FROM tCity WHERE region = '경기') LOOP DBMS_OUTPUT.PUT_LINE(TRIM(v_cities.name) || ': ' || v_cities.area || ', ' || v_cities.popu); END LOOP; END;

3. FOR문과 WHILE문 없이 LOOP 돌리기

FOR문과 WHILE문이 없이도 LOOP를 돌릴 수 있습니다.

조건과 결과는 WHILE 문의 무한 루프 방식과 비슷합니다.

DECLARE v_num INT := 1; v_total INT := 0; BEGIN LOOP v_total := v_total + v_num; v_num := v_num + 1; EXIT WHEN v_num > 100; END LOOP; DBMS_OUTPUT.PUT_LINE('1~100까지의 합산 결과 = ' || v_total); END;

LOOP 블록만 작성하여 무한 루프가 돌아가게 만든 다음,

EXIT WHEN 조건을 통해 탈출시킵니다.

FOR, WHILE 도 없고 심지어 IF 조건문도 작성할 필요가 없기 때문에 간결합니다.

그만 알아보겠습니다.

출처

//www.yes24.com/Product/Goods/101637633

김상형의 SQL 정복 : 소문난 명강의 (무료특별판) - YES24

DBMS에 제약 없이 SQL을 활용한다!핵심 원리를 알려주는 SQL 바이블 DBMS 제품이나 개발툴이 아닌 SQL 언어 그 자체를 배우는 바이블 도서다. 특정 DBMS에 종속적인 사용법보다는 표준화된 데이터 관리

www.yes24.com

Toplist

최신 우편물

태그