2021년 10월 16일 토요일

PL/SQL 반복문 BASIC LOOP, FOR LOOP, WHILE LOOP

 

PL/SQL 반복문 BASIC LOOP, FOR LOOP, WHILE LOOP

15.1.4. PL/SQL 반복문


PL/SQL 프로그래밍을 하다보면 특정 코드블록을 여러번 반복 실행해야 하는 경우가 있을 수 있습니다.  이럴때 PL/SQL반복문을 사용 합니다.


PL/SQL 반복문은 BASIC LOOP ~ END LOOP, WHILE LOOP ~ END LOOP, FOR LOOP ~ END LOOP가 있습니다.


LOOP ~ END LOOP 안에서 루프를 조절하는 몇가지 명령을 사용할 수 있습니다.

EXIT : EXIT를 만나면 제어를 END LOOP 바로 다음으로 이동 시킵니다. 즉 루프를 빠져 나갑니다.

EXIT WHEN condition : 지정한 조건이 되면 루프를 빠져 나갑니다.

CONTINUE : CONTINUE 이후의 문장을 SKIP하고 해당 루프의 다음 반복을 계속할 수 있도록 합니다.

GOTO label : lebel이 지정된 명령문으로 제어를 이동시킵니다. GOTO 사용은 순차적인 프로그래밍 방식에서 제어의 일관성이 상실되어 가독성이 떨어지므로 권장하지 않습니다.


15.1.4.1. BASIC LOOP문


반복실행될 명령은 LOOP ~ END LOOP 사이에 기술하며, 명령문이 실행된 후 제어가 위쪽 LOOP에서 다시 시작됩니다.


<기본형식>

LOOP

    EXIT WHEN condition;

    CONTINUE;

    statements;

END LOOP;


  • condition : 해당 조건이 되면 루프를 빠져 나갑니다.

  • statements : 반복 실행할 명령.


15.1.4.1.1. 구구단 출력하기 : BASIC LOOP


구구단 2단, 3단을 출력하는 PL/SQL 예문을 BASIC LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 숫자 2자리를 저장할 수 있는 NUMBER형 변수 I, J를 선언하고 초기치를 할당

   I NUMBER(2) := 1; 

   J NUMBER(2) := 0; 

BEGIN 

   -- 외부 루프

   LOOP 

      -- I를 1증가

      I := I + 1;

      

      -- I값이 3보다 크면 외부루프를 빠져나옴

      EXIT WHEN I > 3;

      

       -- 내부 루프

       LOOP 

            -- J값을 1증가, J는 0부터 시작됨

            J := J + 1;

            

            -- J값이 9보다 크면 외부루프를 빠져나옴

            EXIT WHEN J > 9;

            DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

       END LOOP;  -- 내부 루프 종료

       

       -- 내부 루프를 빠져 나오면 J를 초기값으로 할당

       J := 0;

       

       DBMS_OUTPUT.PUT_LINE('');

   END LOOP;   -- 외부 루프 종료

END;  


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27



위 예문에서 레이블은 생략 가능 합니다. 실무에서 PL/SQL 작성시 label은 거의 사용하지 않습니다. label을 기술하고 GOTO문 등으로 제어를 이동시킬 수 있지만 권장하지 않습니다.



15.1.4.2. FOR LOOP문


명령을 고정된 횟수 만큼 반복하려면 FOR ~ LOOP를 사용합니다.


루프 카운터 변수는 기본적으로 시작값에서 상한값까지 1씩 증가 하면서 이동하고 REVERSE라고 하면 상한값에서 시작값으로 -1씩 증가 합니다. 또한 초기값과 상한값의 위치가 바뀌어서도 안되고 초기값과 상한값은 점2개(..)로 연결 됩니다.


<기본형식>


FOR index IN [REVERSE] lowest_num..highest_num

LOOP

   statements

END LOOP;


  • index : 루프 카운터 변수. 루프 밖에서는 참조가 불가능 합니다. 루프 안에서는 참조는 가능하지만 값을 변경할 수는 없습니다.

  • [REVERSE] : 루프 카운터는 상한값에서 시작값으로 역으로 변합니다.[생략가능]

  • lowest_num : PLS_INTEGER형식의 루프 카운터 변수의 시작값, 숫자 또는 숫자로 평가되는 표현식.

  • highest_num : PLS_INTEGER형식의 루트 카운터 변수의 상한값, 숫자 또는 숫자로 평가되는 표현식.

  • lowest_num 및 highest_num 값은 FOR LOOP 문이 시작될 때 한 번 평가되므로 값을 수정하더라도 변경사항이 적용되지 않습니다.

  • lowest_num 값이 highest_num 값과 같으면 명령문은 한 번만 실행되고 lowest_num 값이 highest_num 값 보다 크면 명령문이 실행되지 않습니다.

  • statements : 반복 실행할 명령.



15.1.4.1.1. 숫자 출력하기 : FOR  LOOP

 

10부터 2까지 내림 차순으로 짝수를 출력하는  PL/SQL 예문을 FOR LOOP문을 이용하여 작성해 봅시다.


10부터 2까지 내림차순으로 짝수를 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 초기값 2를 가지는 변수 v_step을 선언

   v_step  PLS_INTEGER := 2;

BEGIN 

   -- FOR LOOP 5부터 1까지 -1씩 증가하면서 5번 반복

   FOR I IN REVERSE 1..5  

   LOOP 

       -- 10부터 2까지 5번 반복하면서 값을 출력  

       DBMS_OUTPUT.PUT_LINE(I * v_step);

   END LOOP;   -- FOR LOOP 종료

END; 



<실행결과>

10

8

6

4

2



15.1.4.1.2. 구구단 출력하기 : FOR  LOOP

 

구구단 2단, 3단을 출력하는 PL/SQL 예문을 FOR LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- 숫자 1자리를 저장할 수 있는 NUMBER형 변수 I, J를 선언

   I NUMBER(1); 

   J NUMBER(1); 

BEGIN 

   -- 외부 루프

   FOR I IN 2..3 LOOP 

        -- 내부 루프

        FOR J IN 1..9 LOOP 

             DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

        END LOOP;  -- 내부 루프 종료

        DBMS_OUTPUT.PUT_LINE('');

   END LOOP;   -- 외부 루프 종료

END;  


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27




15.1.4.3. WHILE LOOP문


지정한 조건이 참(TRUE)인 동안 LOOP 안쪽 명령을 실행합니다. 조건이 거짓이라면 LOOP 안쪽 명령은 한번도 실행되지 않습니다.


<기본형식>

WHILE condition

LOOP

   statements

END LOOP;


  • condition : 루프가 반복될 때마다 먼저 평가되며 TRUE 경우만 LOOP ~ END LOOP 사이의 명령문을 실행 합니다. FALSE, NULL이 되면 루프는 종료 됩니다. LOOP에 들어가기 전에 condition이 FALSE이면 WHILE 루프는 전혀 실행되지 않습니다. 이 동작은 루프 본문이 항상 한 번 실행되는 BASIC LOOP 문과 다릅니다.

  • statements : 반복 실행할 명령.

  • LOOP를 조기에 종료하려면 EXIT, EXIT WHEN절을 사용합니다.


15.1.4.3.1. 구구단 출력하기 : WHILE  LOOP

 

구구단 2단, 3단을 출력하는 PL/SQL 예문을 WHILE LOOP문을 이용하여 작성해 봅시다.


구구단 2단, 3단을 출력하세요.


SET SERVEROUTPUT ON;


DECLARE 

   -- NUMBER형 변수 I, J를 선언하고 초기치 할당

   -- 구구단에서 I는 2부터 시작하고 J는 1부터 시작한다.

   I NUMBER(1) := 1; 

   J NUMBER(2) := 0; 

BEGIN 

   -- 외부 루프(2단부터 3단까지 출력)

   WHILE I < 3 

   LOOP 

        I := I + 1;

        -- 내부 루프(1~9까지 반복)

        WHILE J < 9 

        LOOP 

             J := J + 1;

             

             DBMS_OUTPUT.PUT_LINE( I || ' * ' || J || '=' || I * J); 

        END LOOP;  -- 내부 루프 종료

        DBMS_OUTPUT.PUT_LINE('');

        J := 0;

   END LOOP;   -- 외부 루프 종료

END;


<실행결과>

2 * 1=2

…...

2 * 9=18


3 * 1=3

…...

3 * 9=27

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...