0

この pl/sql コードを実行しようとしていますが、明らかにループに陥っています。ロジックは正しいと思います。

DECLARE
  v_num1    NUMBER := 1;
  v_num2    NUMBER := 1;
  v_total   NUMBER := 0;
BEGIN

  WHILE v_num2 < 6 LOOP

    v_total := v_num1 + v_num2;
    DBMS_OUTPUT.PUT_LINE(v_num1 || ' + ' ||  v_num2 || ' = ' || v_total);

    IF v_num2  = 5 THEN
        v_num2 := 1;
        v_num1 := v_num1 + 1;
    ELSE
        v_num2 := v_num2 + 1;
    END IF;

  END LOOP;

END;
4

2 に答える 2

1

v_num2 が 5 になるたびに v_num2 を 1 にリセットし続けると、v_num2 は常に 6 未満になり、ループは永久に実行されます。

  IF v_num2  = 5 THEN
        v_num2 := 1;
        v_num1 := v_num1 + 1;
    ELSE
        v_num2 := v_num2 + 1;
    END IF;
于 2013-11-14T17:22:25.293 に答える
0

あなたはループしている WHILE v_num2 < 6 LOOP

ただし、v_num2 が 5 の場合は、1 を割り当てます。

v_num2 := 1;

したがって、6 に等しくなることはなく、永久にループします。

于 2013-11-14T17:22:29.243 に答える