FOR循环中的上限不会在循环中改变,为什么?

时间:2010-04-12 18:38:17

标签: plsql oracle9i plsqldeveloper

我正在尝试更改For循环中上限的值,但循环运行直到在起始中定义的上限。

根据逻辑循环应该是无限的,因为v_num的值总是先于i,但循环执行三次。请解释

这是代码

    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

4 个答案:

答案 0 :(得分:7)

此行为与文档中指定的一样:

  

FOR-LOOP
  ...
  首次输入FOR循环时,将评估范围,并且永远不会重新评估范围。

(Oracle Documentation)

答案 1 :(得分:1)

通常,FOR循环将是固定的迭代

对于不确定的循环,请使用WHILE

这不是Oracle特有的,以及为什么有单独的循环结构。

答案 2 :(得分:0)

虽然通常认为改变循环变量的值是个坏主意,但有时这似乎是唯一的方法。但是,您可能会发现循环已经过优化,这可能就是这里发生的事情。

答案 3 :(得分:0)

没有什么能阻止语言设计者说“for循环的上限只被评估一次”。这似乎是plsql遵循的规则。