【问题标题】: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 是怎么说的呢?

标签: plsql oracle9i plsqldeveloper


【解决方案1】:

此行为在文档中指定:

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

(Oracle Documentation)

【讨论】:

    【解决方案2】:

    通常,FOR 循环是固定迭代

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          • 2019-08-20
          • 2017-09-21
          • 2021-03-06
          • 2020-11-26
          • 2020-01-13
          相关资源
          最近更新 更多