我试图用PL/SQL编写一个程序,用于打印1到50之间的素数,因为我使用了以下代码-
DECLARE
i number(3);
j number(3);
BEGIN
i := 2;
LOOP
j := 2;
LOOP
EXIT WHEN((MOD(I,J) =0) OR (j=i));
j := j+1
END LOOP
IF LOOP;
IF(j=i) THEN
dbms_output,put(i); **//This line do nothing**
END IF;
i := i+1
exit WHEN i=50;
END LOOP;
END;但不会抹黑任何东西。
我正在使用Oracledb独立编译器/编辑器来运行it.can,任何人都会告诉我这有什么问题。
发布于 2022-02-19 10:15:33
我还没有听说过您正在使用的"Oracledb独立编译器/编辑器“,因此请参阅产品文档,了解如何启用DBMS输出,因为默认情况下并不总是启用它。您可能需要在PL/SQL块开始之前找到菜单栏复选框或包含一个set server output on命令。
关于代码,有几个问题阻碍了它的编译。每个语句都必须以分号结尾。此外,要用linefeed打印完整的行,您需要调用dbms_output.put_line,因为dbms_output.put只添加字符(例如,允许您增量地构建一行),并且必须后面跟着put_line或new_line才能输出任何内容。我不知道IF LOOP;打算做什么。
为了将输出显示问题与生成素数的程序逻辑分开,我建议将代码简化为最简单的再现问题的测试用例,例如,
begin
dbms_output.put_line('Hello, world!');
end;你能查一下这个吗?你的编辑器会显示输出吗?
下面是您的代码的固定版本:
declare
i number(3) := 2;
j number(3);
begin
-- i := 2; - moved to declaration
while i < 50 loop
j := 2;
loop
exit when((mod(i, j) = 0) or (j = i));
j := j + 1; -- missing semicolon
end loop; -- missing semicolon
if j = i then
dbms_output.put_line(i); -- put_line prints a line. put requires a newline
end if;
i := i + 1; -- missing semicolon
-- exit when i = 50; -- moved to loop definition
end loop;
end;https://stackoverflow.com/questions/71183668
复制相似问题