728x90
반응형
반복문 (LOOP) |
|
BASIC LOOP 기본 반복문 SYNTAX LOOP 반복해서 실행해야 할 코드; .... 반드시 루프문을 탈출해야할 코드 존재; END LOOP ; |
DECLARE N NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE(N); N := N +1; IF N > 5 THEN EXIT; -- BREAK 기능을 함. END LOOP로 감. END IF; END LOOP; END; |
-- EXIT - BREAK 기능을 함. - IF문 또는 EXIT WHEN 조건; 으로 직접 탈출문 기술 가능 |
|
FOR LOOP SYNTAX FOR 인덱스변수명 IN [REVERSE] 시작값..종료값 LOOP 실행할 코드 기술; .... [ 탈출할 코드 기술; ] END LOOP; .. : 범위지정 연산자 **인덱스명 : - 선언할 필요가 없다. - 변수처럼 값을 직접 대입받아서 변경하거나 할 수 없다. - IN뒤의 범위의 값을 자동으로 하나씩 받아서 값을 가지게 되는 변수이다. - 대소문자 안 가림 |
DECLARE VNUM NUMBER := 3; BEGIN FOR i IN 1..9 LOOP CONTINUE WHEN MOD(i,2)=0; --CONTINUE : LOOP머리로 돌아감. DBMS_OUTPUT.PUT_LINE(i); END LOOP; END; --출력값 1 3 5 7 9 |
--CONTINUE : LOOP머리로 돌아감. | |
WHILE LOOP SYNTAX WHILE 조건 LOOP 반복으로 실행할 코드들...; 탈출하기 위한 실행코드; END LOOP ; |
DECLARE N NUMBER := 1; BEGIN WHILE N <= 5 LOOP DBMS_OUTPUT.PUT_LINE(N); N := N + 1; END LOOP; END; --출력값 1 2 3 4 5 |
JAVA | ORACLE |
dan : --대소문자 for(int i = 2 ; i <=9 ; i++) { back ; for(int j = 1; j<=9; j++) { System.out.println( i+ "*" + j + "=" ( i * j )); if( j > 5 ) break dan ; --라벨for문 밖으로 } } |
DECLARE VNUM NUMBER := 2; BEGIN <<gubun>> --라벨을 붙일 수 있다. FOR i In 1..9 LOOP DBMS_OUTPUT.PUT_LINE (VNUM||' * '||I||' = '||VNUM*I); IF VNUM < 9 AND i = 9 THEN VNUM := VNUM +1; DBMS_OUTPUT.PUT_LINE (''); GOTO GUBUN; --라벨로 돌아가기, 대소문자 구분 안함. ELSIF VNUM = 9 AND i = 9 THEN EXIT; END IF; END LOOP; END; |
LOOP
ex1)
DECLARE cnt NUMBER := 1; star VARCHAR2(10) := NULL; BEGIN LOOP star := star ||'*'; cnt := cnt+1; DBMS_OUTPUT.PUT_LINE(star); IF cnt>5 THEN EXIT; END IF; END LOOP; END;
* ** *** **** *****
LOOP
ex2) 1~10의 합계DECLARE n NUMBER := 1; -- 1,2,3,4, 5, 6, 7, 8, 9,10 tot NUMBER :=0; -- 0,1,3,6,10,15,21,28,36,45,55 BEGIN LOOP tot := tot + n; -->55 n := n + 1; -->11 IF n > 10 THEN EXIT; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(tot); END;
55
FOR LOOP
ex1) 1~10숫자값 출력 + 1~10의 합계
DECLARE tot NUMBER := 0; BEGIN FOR n IN 1..10 LOOP tot := tot + n; DBMS_OUTPUT.PUT_LINE(n); END LOOP; DBMS_OUTPUT.PUT_LINE('tot의 값은: ' ||tot); END;
1 2 3 4 5 6 7 8 9 10 tot의 값은: 55
FOR LOOP
ex1)
DECLARE VDEPT DEPT%ROWTYPE; BEGIN DBMS_OUTPUT.PUT_LINE('부서번호/부서명/지역명'); DBMS_OUTPUT.PUT_LINE('----------'); FOR CNT IN 1..4 LOOP --값이 한 줄 리턴인 경우만 가능 SELECT DISTINCT * INTO VDEPT FROM DEPT WHERE DEPTNO = 10* CNT; DBMS_OUTPUT.PUT_LINE(VDEPT.DEPTNO||'/'||VDEPT.DNAME||'/'||VDEPT.LOC); END LOOP; END;
부서번호/부서명/지역명 ---------- 10/ACCOUNTING/NEW YORK 20/RESEARCH/DALLAS 30/SALES/CHICAGO 40/OPERATIONS/BOSTON
구구단DECLARE VNUM NUMBER := 2; BEGIN <<gubun>> --라벨을 붙일 수 있다. FOR i In 1..9 LOOP DBMS_OUTPUT.PUT_LINE (VNUM||' * '||I||' = '||VNUM*I); IF VNUM < 9 AND i = 9 THEN VNUM := VNUM +1; DBMS_OUTPUT.PUT_LINE (''); GOTO GUBUN; --라벨로 돌아가기, 대소문자 구분 안함. ELSIF VNUM = 9 AND i = 9 THEN EXIT; END IF; END LOOP; END;
2 * 1 = 2 2 * 2 = 4 . . . 9 * 9 = 81
홀짝홀짝...
DECLARE VNUM NUMBER := 2; BEGIN <<even>> --짝수 LOOP IF MOD(VNUM,2) = 0 THEN DBMS_OUTPUT.PUT_LINE (VNUM||'는 짝수'); VNUM := VNUM +1; ELSE GOTO ODD; END IF; IF VNUM =10 THEN EXIT; END IF; END LOOP; <<odd>> --홀수 LOOP IF MOD(VNUM,2) = 1 THEN DBMS_OUTPUT.PUT_LINE (VNUM||'는 홀수'); VNUM := VNUM +1; ELSE GOTO EVEN; END IF; IF VNUM =10 THEN EXIT; END IF; END LOOP; END;
2는 짝수 3는 홀수 4는 짝수 5는 홀수 6는 짝수 7는 홀수 8는 짝수 9는 홀수
728x90
반응형
'[ORACLE]' 카테고리의 다른 글
[ORACLE] PL/SQL - NDS (1) | 2024.01.25 |
---|---|
[ORACLE] PL/SQL - CURSOR (0) | 2024.01.25 |
[ORACLE] IF ~ ELSIF~ ELSE조건문 (0) | 2024.01.25 |
[ORACLE] REFERENCE TYPE - TYPE, ROWTYPE (0) | 2024.01.24 |
[ORACLE] PL/SQL - ANOYMOUS BLOCK, (0) | 2024.01.24 |