Oracle SQL用CASE实现IF ELSE逻辑报missing keyword错误如何解决
问题原因分析
你的代码抛出missing keyword错误的核心原因是:外层CASE表达式没有添加对应的收尾END关键字,只有内层嵌套的CASE做了闭合,Oracle语法解析时找不到外层CASE的结束标记,直接触发关键字缺失报错。
另外你还存在一个笔误:逻辑中最终计算的字段是empnfees,你的别名错写为了EMPVAR。
修正方案
1. 直接修复原有嵌套写法
补全外层CASE的END即可正常运行:
CASE WHEN depcost <> empcost AND empcourseid IN ('A', 'B') AND empcd ='LTR' THEN (empvar / empdar) * empcost WHEN depcost <> empcost AND empcourseid <> 'A' THEN empcost ELSE CASE WHEN empcd='XYZ' THEN empcost ELSE depcost END END AS EMPNFEES
2. 更简洁的平级写法(可选优化)
不需要嵌套CASE,所有判断逻辑可以合并到同一个CASE结构中,可读性更高,和原有逻辑完全等价:
CASE WHEN depcost <> empcost AND empcourseid IN ('A', 'B') AND empcd = 'LTR' THEN (empvar / empdar) * empcost WHEN (depcost <> empcost AND empcourseid <> 'A') OR empcd = 'XYZ' THEN empcost ELSE depcost END AS EMPNFEES
额外提示:如果empdar字段存在为0的可能,建议用empvar / NULLIF(empdar, 0)替换原有除法逻辑,避免触发除零报错
内容的提问来源于stack exchange,提问作者user17344362
相关产品推荐
相关产品推荐

