尝试执行 PLSQL 打印序列代码时出现 PLS-00103 错误

Getting A PLS-00103 error when trying to execute PLSQL print sequence code

DECLARE
n number := 12;
sum number;
BEGIN
    dbms_output.put_line(n);
    WHILE n>0 LOOP
      sum := 0;
      FOR i IN 0..n-1 LOOP
        IF n%i = 0 THEN
          sum := sum + i;
        END IF;
      END LOOP;
      dbms_output.put_line(sum);
      n := sum;
    END LOOP;
END;

我收到诸如此类的错误

谁能解释为什么,我正在尝试打印 Alequot 序列

两个错误,都很容易修复。

首先,sum 是一个 PL/SQL 关键字 - 您不应将其用作变量名。您可以将其更改为 sum_(带有尾随下划线)或 l_sum(“l”表示“局部变量”)等

其次,n%i是其他语言中的取模表示法; PL/SQL 使用 mod(n, i).

进行这两项更改,您的代码将起作用。

如果您愿意,可以通过从 1 循环到 n/2 使代码更高效 - 但这只是数学,与“编码”无关。

你还做了一些其他奇怪的事情。如果您从 n > 0 开始(您必须这样做 - 等分序列仅对正整数有意义),n 的更新值(在内循环之后)将始终大于 0。

更糟糕的是:虽然一些等分试样序列以 1 结尾,但并非全部如此。有些以完美数字结尾(例如,如果输入本身是完美数字)。一些序列变成周期性的,周期为 2 或更多。也不知道是否所有等分试样序列最终都是周期性的(以 1 结尾,以完美数结尾,或者周期为 2 或更多的循环序列)。因此,为避免麻烦,您应该限制计算可以继续进行的范围。 (这也是“只是数学”,但它也对编码有直接影响。)