PL/SQL中能否使用包含OR选项的CASE语句?
PL/SQL中CASE语句的OR用法问题
不行,你写的这种包含OR的CASE语句写法在PL/SQL里是不合法的,会直接触发编译错误。
原因
PL/SQL的简单CASE语句(也就是CASE selector这种形式),要求每个WHEN子句后面只能跟单个匹配值,不能用OR连接多个值——语法上不支持这种逻辑,因为简单CASE的设计是让selector和WHEN后的单个值做相等匹配,而非复杂条件判断。
正确的替代写法
有两种常用的正确方式实现你要的逻辑:
1. 使用搜索式CASE语句(推荐)
去掉CASE后的selector,直接在WHEN里写完整的条件判断,这样就能用OR或者其他逻辑运算符:
CASE WHEN selector = 'value1' OR selector = 'value2' THEN S1; WHEN selector = 'value3' OR selector = 'value4' THEN S2; WHEN selector = 'value3' THEN S3; -- 注意:这个分支永远不会执行,因为前面已经匹配了'value3' ... ELSE Sn; -- default case END CASE;
2. 合并多个WHEN子句到同一个THEN
如果想保留简单CASE的结构,可以把匹配同一个结果的多个值拆成单独的WHEN子句:
CASE selector WHEN 'value1' THEN S1; WHEN 'value2' THEN S1; WHEN 'value3' THEN S2; WHEN 'value4' THEN S2; WHEN 'value3' THEN S3; -- 同样,这个分支永远不会触发 ... ELSE Sn; -- default case END CASE;
额外提醒
你代码里的第三个WHEN 'value3' THEN S3分支永远不会被执行,因为CASE语句是按顺序匹配的,只要前面的WHEN 'value3' OR 'value4'先匹配到'value3',就会直接执行S2,后面的分支会被跳过。
内容的提问来源于stack exchange,提问作者Daniel Mahoon
相关产品推荐
相关产品推荐

