2008/04/05

[ORACLE]あったじゃん。FOR IN LOOP

昨日、T.SATOさんから、

PL/SQLにもforやwhileループあるはずだよ!

via:T.SATOさん

とアドバイスをもらって、リンク先を見たらリアルにあった。

あったのかよ!!
というわけで、さっそくFOR LOOP文作りました。

DECLARE
  BEGIN
    FOR ln_Count IN 0..9 LOOP
      DBMS_OUTPUT.PUT_LINE(ln_Count);
    END LOOP;
END;

実行結果は、下のようになりました。

0 
1 
2 
3 
4 
5 
6 
7 
8 
9 

FORの隣にある変数は、DECLAREで宣言しなくてもLOOPの中で機能することができるようです。
(機能しなかったら逆にやばいんだけど。)

試しに、DECALRE文で変数宣言しても使うことができました。

DECLARE
    ln_Count NUMBER;
  BEGIN
    FOR ln_Count IN 0..9 LOOP
      DBMS_OUTPUT.PUT_LINE(ln_Count);
    END LOOP;
END;

実行結果は、もちろん、さっきと同じになりました。

さらに変数をNUMBER型からVARCHAR2型に変換しても実行することができました。

DECLARE
    ln_Count VARCHAR2(1);
  BEGIN
    FOR ln_Count IN 0..9 LOOP
      DBMS_OUTPUT.PUT_LINE(ln_Count);
    END LOOP;
END;

ここで、気になったのですが、LOOPを抜けた後の変数の値はどうなってしまうのでしょうか?
最初、9になるんじゃーないのかなと思って、下のように実装して実行しました。

DECLARE
    ln_Count NUMBER;
  BEGIN
    FOR ln_Count IN 0..9 LOOP
      DBMS_OUTPUT.PUT_LINE(ln_Count);
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('hoge1');
    DBMS_OUTPUT.PUT_LINE(ln_Count);
    DBMS_OUTPUT.PUT_LINE('hoge2');
END;


するとどうでしょう。

0
1
2
3
4
5
6
7
8
9
hoge1
hoge2

変数が初期化されてnullになっちゃってるよ。

ループを抜けた後、変数の値を保持していると思って、そのまま実装していく可能性があるので、気をつけないとヤバイっす。

大事なのは、実行してみることですね(* ̄∇ ̄*)

0 コメント:

コメントを投稿