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回も行われません。
関連の記事