Верхний предел в цикле FOR не изменяется в цикле. Почему? - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь изменить значение верхней границы в цикле 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 ]

7 голосов
/ 12 апреля 2010

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

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

(Документация Oracle)

1 голос
/ 12 апреля 2010

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

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

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

0 голосов
/ 12 апреля 2010

Ничто не мешает разработчикам языка сказать: «Верхняя граница цикла for вычисляется только один раз». Похоже, что это правило, за которым следует plsql.

0 голосов
/ 12 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...