PL/SQL WHILE循环求输入数平均值遇PLS-00103错误求助
问题根源与解决方案
核心错误点
- 关键字冲突:
sum和count是PL/SQL内置函数名,直接用作变量名会让编译器混淆,触发PLS-00103编译错误——编译器把sum当成函数,期望后面跟括号,而非+运算符。 - 循环逻辑失效:初始
num赋值为0,WHILE num != 0的条件从一开始就不成立,循环直接跳过,根本无法进入输入流程。 - 替代变量重复问题:使用
&num作为输入变量,会与程序中的num变量名重复,导致预编译替换错误;且默认情况下&变量仅提示一次输入,后续循环会复用首次值,无法实现多次输入。
修正后的代码(支持多次输入)
DECLARE v_num NUMBER := 0; -- 重命名变量,避免关键字冲突 v_sum NUMBER := 0; v_count NUMBER := 0; v_average NUMBER := 0; BEGIN LOOP -- 使用ACCEPT命令每次循环弹出输入提示 ACCEPT input_num PROMPT '请输入数字(输入0退出): '; v_num := &input_num; EXIT WHEN v_num = 0; -- 输入0时直接退出循环 v_sum := v_sum + v_num; v_count := v_count + 1; END LOOP; -- 计算并输出结果 IF v_count > 0 THEN v_average := v_sum / v_count; DBMS_OUTPUT.PUT_LINE('平均值: ' || v_average); ELSE DBMS_OUTPUT.PUT_LINE('未输入任何有效数字!'); END IF; END; /
关键修正说明
- 变量重命名:给变量加上
v_前缀(如v_sum、v_count),彻底避免与PL/SQL内置关键字/函数的命名冲突。 - 循环结构调整:改用
LOOP...EXIT WHEN结构,配合ACCEPT命令,确保每次循环都能弹出输入框,直到输入0退出。 - 输入逻辑优化:
EXIT WHEN直接判断输入值,逻辑更清晰,避免原WHILE循环初始条件不满足的问题。
执行注意事项
- 在SQL Developer中运行时,需切换到脚本运行模式(点击工具栏的"运行脚本"按钮,而非"运行语句")。
- 提前开启DBMS输出:依次点击
视图->DBMS输出,点击"+"连接到当前会话,确保能看到输出结果。
内容的提问来源于stack exchange,提问作者Rohit Raikar
相关产品推荐
相关产品推荐

