尝试执行 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 或更多的循环序列)。因此,为避免麻烦,您应该限制计算可以继续进行的范围。 (这也是“只是数学”,但它也对编码有直接影响。)
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 或更多的循环序列)。因此,为避免麻烦,您应该限制计算可以继续进行的范围。 (这也是“只是数学”,但它也对编码有直接影响。)