PL/SQLの勉強5 反復について(LOOP文とか)

2023-03-09

プログラムの基本的な構造は、以下の3つでした。

  • 順次
  • 分岐
  • 反復

前回はそのうちの「分岐」についてやりました。
簡単に言えば「IF文」についてです。
そちらも読みたいなと言う方は、以下のページでどうぞ。

ということで、今回は「反復」について
書き方をやっていきます。

反復とは…

反復とは…
ザックリいうと「繰り返し処理する」ことです。

もっというと特定の条件まで繰り返し処理する」ことです。

このフローで矢印をたどると、
「特定の条件」が「YES」になるま
何回も「処理」が実行されますよね。

このグルグル回る感じが、反復です。

LOOP文(超基本な書き方)

PL/SQLの反復は「LOOP」という語でできます。
こんな感じに書きますよ!

begin
  loop
    dbms_output.put_line('グルグル回ってます。。。');
  end loop;
end;

loopからend loopまでをグルグルします。

ただし、これは実行しないでください!

なぜかって?
これだけでは処理が終わらないからです!!

反復とは何か?で言いました。
「特定の条件まで繰り返し処理する」んですが
これだと「特定の条件まで」が無いんです。

ちなみに頑張って実行してみると。。。

なんか出た。
エラーってことは分かるけど、どんなエラーなのかは分かりませんね。

意外とOracle Live SQLって不親切なのねw

正式には以下のように書きます。
いきなり変数とか増えてますけど、頑張ってください。

declare
  v_cnt NUMBER := 0;
begin
  loop
    v_cnt := v_cnt + 1;
    dbms_output.put_line(to_char(v_cnt) || '回目のループですよ');
    
    exit when v_cnt = 10;
  end loop;
end;

2行目で変数:v_cntを定義しています。
初期値は0です。

4〜9行目のloop〜end loopでグルグル回してます。

5行目の「v_cnt := v_cnt + 1」
プログラミング独特の書き方ですね。

最初のloopでは、0(初期値) + 1で結果:1になります。
2回目のloopは、1(最初のloopでの結果) + 1で結果:2になります。
3回目のloopは、2(2回目のloopでの結果) + 1で結果:3になります。
・・・
こんな感じに、1ずつカウントアップしていきます。

6行目で、何回目のloopかを出力しています。

8行目では「特定の条件」でloopが終わるように
EXIT句を使用しています。
今回は「変数が10になったら終わりね!」としています。

結果、以下のように出力されるはずです。

WHILE文

「反復」には色々な書き方があります。

ただ単にLOOPを書くこともできますし
以下のように「WHILE」を使った書き方もできます。

declare
  v_cnt NUMBER := 0;
begin
  while v_cnt < 10 loop
    v_cnt := v_cnt + 1;
    dbms_output.put_line(to_char(v_cnt) || '回目のループですよ');
  end loop;
end;

さっきのLOOP文と違って「EXIT句」が無いですね。

4行目の「while句」は
v_cntが10より小さい間はずっとloopしましょう!
という意味になります。

つまり4〜7行目でグルグル回してるんですが、
4行目に戻った時に「10より小さいかな?」って判断してるんですね。

結果は以下のように
LOOP文の時と同じになります。

FOR文

「反復」の書き方、3つ目です。

これが1番簡単な書き方って思ってます。

begin
  for v_cnt in 1..10 loop
    dbms_output.put_line(to_char(v_cnt) || '回目のループですよ');
  end loop;
end;

loopとかwhileと違って
declareで変数を定義してないですよね。

2行目の「for v_cnt in・・・」のところで
ループ内だけで有効な変数:v_cntを定義しています。

「in 1..10 loop」部分は
1〜10までループせよ!と言っています。

結果、以下のようになりますよ!
loopやwhileの時と一緒ですよね。

結局どれを使えばいいの?

  • LOOP
  • WHILE
  • FOR

の3種類のやり方を見ていきました。

…多分こう思われたんじゃないかと思います。

結局どれを使えばいいの!?

完全に僕の趣味でお答えします。

FORを使いましょう!

そしてFORじゃ処理ができない…
となったらLOOPを使いましょう!

つまり、WHILEは覚えなくていいです。
僕は仕事でWHILEなんて使ったことないですし、
この記事を書くために調べたくらいですw

僕の趣味で「これを使え」とは言っていますが
ちゃんと理由はあります。

これからさらにPL/SQLを覚えていくにあたって
いろんな「ループっぽいもの」が出てきます。

そこには「FOR的なもの」があるんです。

覚えるものが少ない方が幸せだな、と思ってるんで
とりあえずFORを覚えておけば
ほんのちょっとだけ幸せ度が高いんです。。。

以上ですw

今回は「反復」についてやっていきました。

もっと詳しく何をやったかって?

FOR文と、、、あとLOOP文?だったかな。。。

もう一つ何かあったような気がするけど…
忘れました!!

これでプログラミングの基本構造

  • 順次
  • 分岐
  • 反復

を覚えたことになります。

これを使えば、基本的に何でも出来るはずです!

ということで
次回は「とある問題」にチャレンジしてみたいと思います。

PL/SQL

Posted by kiri