昨日、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 コメント:
コメントを投稿