2010-04-12 62 views
1

我正在嘗試更改For循環中上限的值,但循環正在運行,直到在起始處定義的上限。FOR循環中的Upper Bound在循環中沒有被修改,爲什麼?

根據邏輯循環應該是無限的,因爲v_num的價值永遠是我的一個未來,但循環執行3 time.Please解釋

這是代碼

DECLARE 
    v_num number:=3; 
    BEGIN 
     FOR i IN 1..v_num LOOP 
      v_num:=v_num+1; 
      DBMS_OUTPUT.PUT_LINE(i ||' '||v_num); 
    END LOOP; 
    END; 
Ouput Coming 

    1 4 
    2 5 
    3 6 
+0

「根據邏輯循環應該去無限」。當然,根據邏輯。但是,oracle會說什麼? – KevinDTimm 2010-04-12 18:44:38

回答

7

此行爲是因爲文件中規定:

for循環
...
當FOR循環先進入,並且永遠不會重新評估的範圍進行評估。

(Oracle Documentation)

0

雖然通常認爲改變循環變量的值是一個壞主意,有時它似乎是唯一的出路。但是,您可能會發現循環已經過優化,而這可能就是這裏發生的事情。

0

有什麼阻礙語言的設計者說,從「for循環的上限的只計算一次。」這似乎是plsql在此處遵循的規則。

1

一般來說,FOR循環將是固定的迭代

對於不確定的循環,使用WHILE

這不是甲骨文具體的,爲什麼有單獨的循環結構。

相關問題