PL/SQL条件语句报错求助:请帮忙排查代码错误(附报错信息)
PL/SQL条件语句错误排查解决办法
错误点分析
- ELSE分支语法错误:ELSE是默认分支,不需要跟任何条件表达式,你在ELSE后面加了
(stock_rec.price >= 75),这违反了PL/SQL的语法规则,也是报错的直接原因。 - 拼写错误:所有
DBMS_PUTPUT都写错了,正确写法是DBMS_OUTPUT(少了字母'O')。 - 冗余嵌套:内层的
BEGIN...END完全多余,没必要嵌套,直接写IF逻辑即可。 - 潜在异常风险:
SELECT INTO如果查询不到匹配数据会抛出NO_DATA_FOUND异常,建议添加异常处理块避免程序崩溃。
修正后的代码
DECLARE stock_rec stock%ROWTYPE; var_company stock.company%TYPE := 'IBM'; BEGIN SELECT * INTO stock_rec FROM stock s WHERE s.company = var_company; IF stock_rec.price < 45 THEN DBMS_OUTPUT.PUT_LINE('Current price is very low !'); ELSIF stock_rec.price >= 45 AND stock_rec.price < 55 THEN DBMS_OUTPUT.PUT_LINE('Current price is low !'); ELSIF stock_rec.price >= 55 AND stock_rec.price < 65 THEN DBMS_OUTPUT.PUT_LINE('Current price is medium !'); ELSIF stock_rec.price >= 65 AND stock_rec.price < 75 THEN DBMS_OUTPUT.PUT_LINE('Current price is medium high !'); ELSE DBMS_OUTPUT.PUT_LINE('Current price is high !'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('未找到IBM的库存数据'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('找到多条IBM的库存数据'); END; /
内容的提问来源于stack exchange,提问作者user12864747
相关产品推荐
相关产品推荐

