- ベストアンサー
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になります。 何故でしょうか??
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
for ~ in ~ で、定義されるループカウンタは、 for ~ end loopでのみ参照できるローカル変数です。 (参照のみでき、勝手に代入することも出来ない) 偶々、ユーザ定義の変数名とループカウンタが同じ名前のため、 参照する箇所により、(見た目には混乱しますが)別の変数として 扱われます。 (マニュアルにも、そのように書かれています)
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
回答No.2
FOR文のカウンターは宣言不要。 最後の >>dbms_output.put_line(wk_cnt); にあるwk_cntは、最初の >>wk_cnt := 100; をそのまま出力してるだけ。
質問者
お礼
回答ありがとうございます。 よくわかりました。 > FOR文のカウンターは宣言不要。 これは知ってたんですが、宣言したらどうなるのかと思いまして、質問しました。
お礼
回答ありがとうございます。 > for ~ in ~ で、定義されるループカウンタは、 > for ~ end loopでのみ参照できるローカル変数です。 > (参照のみでき、勝手に代入することも出来ない) そういうことだったんですか。 よくわかりました。