2010-04-12 1 views
1

Я пытаюсь изменить значение верхней границы в цикле For, но цикл работает до верхней границы, которая была определена в начале.Верхняя граница цикла FOR не изменяется в цикле, почему?

Согласно логике цикла должна идти в бесконечность, так как значение v_num всегда один впереди меня, но цикл выполняется три 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

«В соответствии с логикой цикл должен быть бесконечным». Конечно, по логике. Однако, что говорит оракул? – KevinDTimm

ответ

7

Такое поведение, как указано в документации:

FOR-LOOP
...
Диапазон вычисляется, когда цикл сначала вводится и никогда не переоценены.

(Oracle Documentation)

0

В то время как обычно считается плохой идеей изменить значение переменной цикла, иногда кажется, что это единственный путь. Однако вы можете обнаружить, что петли оптимизированы, и это может быть то, что происходит здесь.

0

Там нет ничего предотвращения разработчики языка от слова «Верхняя граница для цикла вычисляется только один раз». Это, по-видимому, правило, что plsql здесь следует.

1

Как правило, для петель будут фиксированными итерации

Для неопределенного зацикливания, используют WHILE

Это не Oracle конкретно, и почему существует отдельные циклические конструкции.