Oracle PL/SQL 강좌
LOOP문, WHILE문 10 11 96,181

by 김정식 LOOP WHILE LOOP [2002.01.20]


LOOP문 문법

  • - EXIT 문이 사용되었을 경우, 무조건 LOOP문을 빠져나간다.
  • - EXITH WHEN 이 사용될 경우 WHEN 절에 LOOP를 빠져 나가는 조건을 제어 할 수 있다.

LOOP문 예제

 
-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SQL> SET SERVEROUTPUT ON ;  

SQL> DECLARE

        v_cnt NUMBER := 100;

     BEGIN

        DBMS_OUTPUT.ENABLE ;

        LOOP
            INSERT INTO emp(empno, ename , hiredate)
            VALUES(v_cnt, 'test'||to_char(v_cnt),  sysdate);

            v_cnt := v_cnt+1;

            EXIT WHEN v_cnt > 110;

        END LOOP;

        DBMS_OUTPUT.PUT_LINE('데이터 입력 완료');
        DBMS_OUTPUT.PUT_LINE(v_cnt-100 || '개의 데이터가 입력되었습니다');

     END;           
     /

데이터 입력 완료
11개의 데이터가 입력되었습니다 
 
        

WHILE LOOP문 예제

WHILE LOOP문은 FOR문과 비슷하며, 조건이 TRUE일 경우 만 반복되는 LOOP문 이다.

 
SQL> DECLARE

       v_cnt number := 100; 
	
     BEGIN
	
       DBMS_OUTPUT.ENABLE; 
	
       WHILE v_cnt < 110 LOOP 
	
           INSERT INTO emp(empno, ename , hiredate) 
           VALUES(emp_seq.nextval, 'test', sysdate); 
	
           v_cnt := v_cnt+1; 
	
           EXIT WHEN v_cnt > 110; 
	
       END LOOP; 
	
       DBMS_OUTPUT.PUT_LINE('데이터 입력 완료'); 
       DBMS_OUTPUT.PUT_LINE(v_cnt-100 || '개의 데이터가 입력되었습니다'); 
		
    END; 
    / 
        

- 강좌 URL : http://www.gurubee.net/lecture/1057

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 올챙이삼형제 [2006.05.29 16:55:15]
좋은자료 감사 합니다~

by 갸우뚱 [2007.06.15 17:38:14]
WHILE LOOP문 실행 되나요??

by 쩡 [2007.07.09 17:23:26]
DECLARE

v_cnt number := 100;


BEGIN

DBMS_OUTPUT.ENABLE ;

WHILE v_cnt < 110 LOOP

INSERT INTO emp(empno, ename , hiredate)
VALUES(emp_seq.nextval, 'test', sysdate);

v_cnt := v_cnt+1;

EXIT WHEN v_cnt > 110;

END LOOP;

DBMS_OUTPUT.PUT_LINE('데이터 입력 완료');
DBMS_OUTPUT.PUT_LINE(v_cnt-100 || '개의 데이터가 입력되었습니다');


END ;
/

by 도리도리 [2007.07.31 10:06:34]
/쩡 님 exit when 조건은 while문에서 동일한 조건이 이미 걸려있으므로 불필요할듯합니다. 특정한 다른 조건을 추가로 걸때 사용하심이..
그리고 emp_seq.nextval << 요녀석이 갑자기 튀어나와서 실행은 안되네요.
v_cnt 로 바꿔주셔야할듯..

by 외Rony [2007.09.05 11:51:47]
이렇게 말이지요 ?
WHILE v_cnt < 110 LOOP
INSERT INTO emp(empno, ename , hiredate)
VALUES(v_cnt, 'test2'||to_char(v_cnt), sysdate);
v_cnt := v_cnt + 1 ;
END LOOP ;

by 김윤경 [2007.11.09 09:25:48]
맞아요. while 문에서는 이미 조건이 있기 때문에 중간에 또 조건을 넣는 것은 필요 없어요. 잘 돌아가네요;;;

by 김민성 [2010.02.09 18:56:26]
CREATE SEQUENCE EMP_SEQ
START WITH 1000
INCREMENT BY 1
MAXVALUE 100000
1000부터 100000까지 1씩 증가 하는 SEQUENCE 입니다. 먼저 만든후 한번 해 보삼..

by 손님 [2011.01.03 21:20:52]
commit;안해줘도 되나여?

by 박상규 [2011.06.08 14:33:10]
LOOP문 예제 실행시,

ORA-00922: 누락된 또는 부적합한 옵션 <-- 에러

위와 같은 에러가 뜨는데...왜 그런건 가요???

by 잠만자 [2012.03.20 02:08:18]
for loop문과 그냥 loop문의 차이는 뭔가요??

by 이정재 [2017.01.19 18:15:03]

INSERT문 뒤에 COMMIT;이 빠졌네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입