• ベストアンサー

PL/SQLで

set serveroutput on size 100000; declare wk_cnt integer; begin wk_cnt := 100; for wk_cnt in 1..10 loop … end loop; dbms_output.put_line(wk_cnt); end; / で、最後のwk_cntが10(11?)ではなく100になります。 何故でしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

for ~ in ~ で、定義されるループカウンタは、 for ~ end loopでのみ参照できるローカル変数です。 (参照のみでき、勝手に代入することも出来ない) 偶々、ユーザ定義の変数名とループカウンタが同じ名前のため、 参照する箇所により、(見た目には混乱しますが)別の変数として 扱われます。 (マニュアルにも、そのように書かれています)

door_to_tomorrow
質問者

お礼

回答ありがとうございます。 > for ~ in ~ で、定義されるループカウンタは、 > for ~ end loopでのみ参照できるローカル変数です。 > (参照のみでき、勝手に代入することも出来ない) そういうことだったんですか。 よくわかりました。

その他の回答 (1)

回答No.2

FOR文のカウンターは宣言不要。 最後の >>dbms_output.put_line(wk_cnt); にあるwk_cntは、最初の >>wk_cnt := 100; をそのまま出力してるだけ。

door_to_tomorrow
質問者

お礼

回答ありがとうございます。 よくわかりました。 > FOR文のカウンターは宣言不要。 これは知ってたんですが、宣言したらどうなるのかと思いまして、質問しました。