PL/SQLでも、もちろん繰り返し制御はあります。下記の3種類の構文が用意されています。
- LOOP文
- FORループ
- WHILEループ
LOOP文
構文
1 2 3 4 |
LOOP EXIT [WHEN 条件]; 処理; END LOOP; |
必ず、EXIT句で終了させるようにしましょう。でなければ、無限ループになってしまうので注意です。
実装例
1 2 3 4 5 6 7 8 9 |
DECLARE num NUMBER := 0; BEGIN LOOP DBMS_OUTPUT.PUT_LINE(num || '個目'); num := num + 1; EXIT WHEN num >= 10; END LOOP; END; |
FORループ
昇順でカウントアップさせる場合
構文
1 2 3 |
FOR ループカウンタ IN 下限値..上限値 LOOP 処理; END LOOP; |
例文
1 2 3 4 5 |
BEGIN FOR i IN 1..9 LOOP DBMS_OUTPUT.PUT_LINE(i || '個目'); END LOOP; END; |
降順でカウントアップさせる場合
構文
1 2 3 |
FOR ループカウンタ REVERSE IN 下限値..上限値 LOOP 処理; END LOOP; |
例文
1 2 3 4 5 |
BEGIN FOR i IN REVERSE 1..9 LOOP DBMS_OUTPUT.PUT_LINE(i || '個目'); END LOOP; END; |
WHILEループ
構文
1 2 3 |
WHILE 条件 LOOP 処理; END LOOP; |
例文
1 2 3 4 5 6 7 8 |
DECLARE num NUMBER := 0; BEGIN WHILE num < 10 LOOP DBMS_OUTPUT.PUT_LINE(num || '個目'); num := num + 1; END LOOP; END; |
実行結果
上記構文のいずれの繰り返し制御でも下記のような結果になります。
ただし、FORループのREVERSE句を使った場合だけは降順の下記の結果になります。
EXIT
ループを終了させることができる構文です。
1 2 3 4 5 6 7 |
BEGIN FOR i IN 1..3 LOOP IF i = 2 THEN EXIT; END IF; END LOOP; END; |
CONTINUE
ループ処理を1つスキップできる構文です。
1 2 3 4 5 6 7 |
BEGIN FOR i IN 1..3 LOOP IF i = 2 THEN CONTINUE; END IF; END LOOP; END; |
上記サンプルでは3回ループを回して2の時だけスキップさせています。
この記事へのコメントはありません。