在Oracle数据库中,CASE WHEN语句是一个条件表达式,它允许你基于不同的条件执行不同的操作。该语句在SELECT、UPDATE、DELETE语句以及PL/SQL块中都非常有用。下面是关于CASE WHEN在Oracle中的详细用法:
一、基本语法
CASE  WHEN condition1 THEN result1  WHEN condition2 THEN result2  ...  ELSE resultN  
END- conditionX:要评估的条件。
- resultX:当对应条件为真(TRUE)时返回的结果。
- ELSE子句是可选的,当所有- WHEN条件都不满足时,将返回- ELSE后面的结果。
- 如果没有ELSE子句,且所有WHEN条件都不满足,CASE表达式将返回NULL。
二、使用示例
1. 在SELECT语句中使用
-  简单CASE表达式: 
SELECT column1,   CASE column2   WHEN 'value1' THEN 'result1'   WHEN 'value2' THEN 'result2'   ...   ELSE 'result'   END AS result_column   
FROM table;-  搜索CASE表达式: 
SELECT column1,   CASE   WHEN condition1 THEN result1   WHEN condition2 THEN result2   ...   ELSE result   END AS result_column   
FROM table;2. 在UPDATE语句中使用
假设我们有一个名为employees的表,我们想要根据薪水给员工分类,并更新salary_category列:
UPDATE employees   
SET salary_category = CASE   WHEN salary < 3000 THEN 'Low'   WHEN salary BETWEEN 3000 AND 7000 THEN 'Medium'   WHEN salary > 7000 THEN 'High'   ELSE 'Unknown'   END;3. 在WHERE子句中使用
虽然直接在WHERE子句中使用CASE WHEN并不常见,但它是可能的。通常,这种用法是为了实现更复杂的筛选条件。例如:
SELECT *   
FROM table   
WHERE CASE   WHEN condition1 THEN true   WHEN condition2 THEN true   ELSE false   END = true;但请注意,上述查询在性能上可能不是最优的,并且有更简单的方法来实现相同的筛选条件。
三、注意事项
- WHEN的执行顺序:当“第一个”- WHEN满足条件时,便结束查询(不会继续判断其它的- WHEN条件)。
- ELSE子句是可选的,但在PL/SQL中,如果省略了- ELSE子句且没有条件满足,将直接报错。
- 在某些情况下,当CASE WHEN和DECODE函数等价,且判断语句不超过一定数量时(如10行),使用DECODE可能更简洁。
希望这可以帮助你更好地理解和使用Oracle中的CASE WHEN语句。
