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中的代表总是相等但没有循环时不相等