PL/SQLの勉強5 反復について(LOOP文とか)
プログラムの基本的な構造は、以下の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文?だったかな。。。
もう一つ何かあったような気がするけど…
忘れました!!
これでプログラミングの基本構造
- 順次
- 分岐
- 反復
を覚えたことになります。
これを使えば、基本的に何でも出来るはずです!
ということで
次回は「とある問題」にチャレンジしてみたいと思います。
Discussion
New Comments
No comments yet. Be the first one!