Oracle PL/SQLのループ文のサンプル(LOOP,WHILE)

OracleのPL/SQLのループ文のサンプルです。

目次

サンプル 条件でループを抜ける(LOOP文)
  select文で取得した件数分ループする
  決まった回数繰り返す(FOR文)
  配列の数分繰り返す(FOR文)
  最初に条件の判定をする(WHILE文)

条件でループを抜ける(LOOP文)

LOOP
  IF 条件 THEN
     EXIT;
  END IF;
END LOOP;

条件でループを抜けるサンプルです。

create or replace procedure TEST1
IS
	a NUMBER(10) := 1;
BEGIN
	LOOP
		IF a = 3 THEN
			EXIT; -- ループを抜ける
		END IF;
		a := a + 1;
	END LOOP;
	DBMS_OUTPUT.PUT_LINE('cnt=' || a); -- cnt=3が出力される
END;

5行目のLOOPから10行目のEND LOOPまでループします。
6行目のIF文の条件に合致した場合、7行目のEXITでループ文を抜けます。

 

select文で取得した件数分ループする

LOOP
   EXIT WHEN カーソル%NOTFOUND;
END LOOP;

select文で取得した件数分ループするサンプルです。

create or replace procedure TEST1
IS
  	CURSOR cur1 IS
		SELECT name,romaji FROM employee
		WHERE id = '99';

	employee_rec cur1%ROWTYPE;
BEGIN
	OPEN cur1;
		LOOP
	    	FETCH cur1 INTO employee_rec; --データを取得
	        	EXIT WHEN cur1%NOTFOUND; --NOTFOUNDのとき抜ける
		END LOOP;
	CLOSE cur1;
END;

11行目は、FETCH文です。取得したデータをカーソルから変数にセットしています。
12行目は、カーソルのデータがNOTFOUNDのときEXITでループを抜けます。

 

決まった回数繰り返す(FOR文)

FOR 変数 IN 数値...数値 LOOP
END LOOP;

決まった回数を繰り返すサンプルです。

create or replace procedure TEST1
IS
  num1  NUMBER(10) := 3;
BEGIN
	FOR a IN 1..num1 LOOP
		DBMS_OUTPUT.PUT_LINE(a); -- 1 2 3が出力される
	END LOOP;
END;

5行目は、変数aが1,2,3となり、その分繰り返されます。
6行目は、1,2,3が出力されます。

 

配列の数分繰り返す(FOR文)

FOR 変数 IN 配列名.FIRST..配列名.LAST
LOOP
END LOOP;

配列の数分繰り返すサンプルです。

create or replace procedure TEST1
IS
    TYPE AR1 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
    c1 AR1;
BEGIN
	c1(0) := 'red';
	c1(1) := 'yellow';
	c1(2) := 'blue';

    FOR i IN c1.FIRST..c1.LAST
	LOOP
      DBMS_OUTPUT.PUT_LINE(c1(i)); -- red yellow blueが出力される
	END LOOP;
END;

10行目は、配列.FIRSTと配列.LASTで最初の要素から最後の要素まで繰り返します。

 

最初に条件の判定をする(WHILE文)

WHILE 条件
LOOP
END LOOP;

最初に条件を判定するサンプルです。

create or replace procedure TEST1
IS
  a NUMBER(10) := 0;
BEGIN
	WHILE a < 5 
	LOOP
		DBMS_OUTPUT.PUT_LINE(a);-- 0 1 2 3 4が出力される
		a := a + 1;
	END LOOP;
END;

5行目は、ループ処理に入る前に条件の判定があります。
最初の判定で、falseの場合は、ループ処理が1回も行われません。

関連の記事

Oracle PL/SQLのストアドプロシージャのサンプル
Oracle PL/SQLのif文のサンプル

△上に戻る