1

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
4

4 に答える 4

7

この動作は、ドキュメントで指定されているとおりです。

FOR-LOOP
...
FOR ループに最初に入ったときに範囲が評価され、再評価されることはありません。

(オラクルのドキュメント)

于 2010-04-12T18:44:22.973 に答える
1

通常、FOR ループは固定反復になります。

不確定ループの場合は、WHILEを使用します

これは Oracle 固有のものではなく、別のループ構造がある理由です。

于 2010-04-12T19:10:52.220 に答える
0

ループ変数の値を変更することは一般的に悪い考えだと考えられていますが、それが唯一の方法のように思える場合もあります。ただし、ループが最適化されていることに気付くかもしれません。それがここで起こっていることかもしれません。

于 2010-04-12T18:40:46.243 に答える
0

言語設計者が「for ループの上限は 1 回だけ評価される」と言うのを妨げるものは何もありません。これは、ここで plsql が従っているルールのようです。

于 2010-04-12T18:44:41.010 に答える