FOR循环中的上界在循环中没有改变,为啥?

Posted

技术标签:

【中文标题】FOR循环中的上界在循环中没有改变,为啥?【英文标题】:Upper Bound in FOR loop does not get altered in loop,Why?FOR循环中的上界在循环中没有改变,为什么? 【发布时间】:2010-04-12 18:38:17 【问题描述】:

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

按逻辑循环应该无限循环,因为v_num的值总是比i提前1,但是循环执行了3次。请解释一下

这是代码

    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

【问题讨论】:

“根据逻辑循环应该无限”。当然,按照逻辑。但是,oracle 是怎么说的呢? 【参考方案1】:

此行为在文档中指定:

FOR循环 ... 该范围在首次进入 FOR 循环时进行评估,并且永远不会重新评估。

(Oracle Documentation)

【讨论】:

【参考方案2】:

通常,FOR 循环是固定迭代

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于FOR循环中的上界在循环中没有改变,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥通过for循环插入时List中的代表总是相等但没有循环时不相等

for循环子命令中的bash变量扩展[重复]

C#语句二——循环语句(for循环与for循环嵌套)

为啥这个for循环不执行?

为啥我在 PL/SQL 中的 for 循环没有打印出最后一次迭代

Python中的嵌套循环