Skip to content

SQL 반복문 #
Find similar titles

Structured data

Category
Database

SQL/반복문 #

FOR LOOP #

Index가 lower_bound 부터 upper_bound 까지 증가하며 statements를 반복처리 하는 문장이다.

문법 #

FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP
  statements
END LOOP;
  • Lower_bound 에서 upper_bound 값으로 진행한다.
  • REVERSE 키워드가 사용되면 lower_bound 에서 upper_bound 값으로 진행한다.
  • IN 구절엔 lower_bound, upper_bound 또는 범위를 갖는 select 문이나 coursor문장이 가능하다.

예제 #

BEGIN
  DBMS_OUTPUT.PUT_LINE ('lower_bound < upper_bound');

  FOR i IN 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE (i);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE ('lower_bound = upper_bound');

  FOR i IN 2..2 LOOP
    DBMS_OUTPUT.PUT_LINE (i);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE ('lower_bound > upper_bound');

  FOR i IN 3..1 LOOP
    DBMS_OUTPUT.PUT_LINE (i);
  END LOOP;
END;

LOOP문 #

LOOP문 내의 statements 를 반복처리 하는 문장이다.

문법 #

LOOP
  statements
END LOOP;
  • EXIT 문을 사용하여 LOOP문을 벗어날 수 있다.
  • EXITH WHEN 문을 사용하여 조건에 따라 LOOP문을 벗어날 수 있다.

예제 #

DECLARE
  s  PLS_INTEGER := 0;
  i  PLS_INTEGER := 0;
  j  PLS_INTEGER;
BEGIN
  <<outer_loop>>
  LOOP
    i := i + 1;
    j := 0;
    <<inner_loop>>
    LOOP
      j := j + 1;
      s := s + i * j; -- Sum several products
      EXIT inner_loop WHEN (j > 5);
      EXIT outer_loop WHEN ((i * j) > 15);
    END LOOP inner_loop;
  END LOOP outer_loop;
  DBMS_OUTPUT.PUT_LINE
    ('The sum of products equals: ' || TO_CHAR(s));
END;

WHILE LOOP문 #

WHILE문 안의 조건절이 true일겨우 계속 반복되는 Loop문이다.

문법 #

WHILE condition LOOP
  statements
END LOOP;
  • 무한 Loop를 반복하는 것을 방지하기 위해 실행되는 절에는 반드시 조건절을 false로 변경하는 로직이 담겨있어야 한다.

예제 #

DECLARE
  done  BOOLEAN := FALSE;
BEGIN
  WHILE done LOOP
    DBMS_OUTPUT.PUT_LINE ('This line does not print.');
    done := TRUE;  -- This assignment is not made.
  END LOOP;

  WHILE NOT done LOOP
    DBMS_OUTPUT.PUT_LINE ('Hello, world!');
    done := TRUE;
  END LOOP;
END;

Result:
Hello, world!

References #

0.0.1_20210630_7_v33