PL/SQL打印语法问题:1-50质数打印程序无输出故障排查
排查PL/SQL质数打印程序的错误与修正
你的这段PL/SQL代码存在几个关键问题,要么导致编译失败,要么让你看不到输出结果,我来逐个给你拆解并修正:
致命语法错误:无效的IF LOOP;语句
代码里END LOOP;之后的IF LOOP;完全不符合PL/SQL的语法规则,这会直接让程序编译不通过,根本没法执行。必须把这一行删掉。
输出语句的语法问题
你写的dbms_output,put(i);有两个小错误:
- 调用PL/SQL内置子程序时,应该用点号(
.)而不是逗号(,),正确写法是dbms_output.put(i); - 只用
put会把所有质数输出挤在同一行,建议换成dbms_output.put_line(i);,让每个质数单独占一行,看起来更清楚 - 你标注的
//该行无作用其实是因为前面的语法错误导致程序根本没执行到这一步,不是语句本身没用,修正语法后它就能正常工作了
别忘了开启输出开关
就算代码全对,Oracle默认是关闭dbms_output输出的,所以你得在执行这段程序之前先跑一句:
SET SERVEROUTPUT ON;
这样才能在控制台看到打印的质数。
修正后的完整代码
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(j = i) THEN dbms_output.put_line(i); END IF; i := i + 1; EXIT WHEN i = 50; -- 保持你原有的循环终止逻辑,遍历到49为止 END LOOP; END; /
小补充
你的内层循环逻辑是对的:当找到能整除i的j(且j不等于i),或者j遍历到i本身时退出循环。此时如果j等于i,说明i没有除了1和自身之外的因数,确实是质数,这部分逻辑没问题。
内容的提问来源于stack exchange,提问作者Priya Upwanshi
相关产品推荐
相关产品推荐

