Oracle PL / SQL CASE 语句
在CASE语句中使用两种类型的表达式:简单和搜索。
简单CASE表达式
一个简单的CASE语句根据单个表达式的结果选择要执行的PL / SQL语句的几个序列中的哪一个。
简单CASE语句采用以下形式:
CASE expression
WHEN result1 THEN
statements1
WHEN result2 THEN
statements2
...
ELSE
statements_else
END CASE;
实例
一个简单的CASE表达式从一个或多个选项中选择一个结果,并返回结果。
DECLARE
grade CHAR(1) := 'A';
v_result VARCHAR2(20);
BEGIN
v_result :=
CASE grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
END;
DBMS_OUTPUT.PUT_LINE (v_result);
END;
/
上面的代码生成以下结果:
可选的ELSE子句与IF语句中的ELSE子句的工作方式相同。
如果选择器的值由WHEN子句覆盖,那么将执行ELSE子句。
如果未提供ELSE子句且没有WHEN子句匹配,则表达式将返回NULL。
搜索CASE表达式
搜索的CASE表达式允许您测试不同的条件,而不是将单个表达式与各种值进行比较。
搜索的CASE表达式没有选择器。
搜索的CASE语句评估布尔表达式的列表,当它找到一个计算结果为TRUE的表达式时,执行与该表达式相关联的一系列语句。
搜索的CASE语句具有以下形式:
CASE
WHEN expression1 THEN
statements1
WHEN expression2 THEN
statements2
...
ELSE
statements_else
END CASE;
实例2
CASE
WHEN salary >= 100 AND salary <=200 THEN
raise_salary(employee_id, 1500);
WHEN salary > 200 AND salary <= 400 THEN
raise_salary(employee_id, 1000);
WHEN salary > 400 THEN
raise_salary(employee_id, 500);
ELSE
raise_salary(employee_id, 0);
END CASE;
嵌套CASE语句
CASE语句可以嵌套为IF语句。
CASE
WHEN salary >= 100 THEN
CASE
WHEN salary <= 200 THEN
raise_salary(employee_id, 1500);
WHEN salary > 400 THEN
raise_salary(employee_id, 500);
WHEN salary > 200 THEN
raise_salary(employee_id, 1000);
END CASE;
WHEN salary < 100 THEN
raise_salary(employee_id,0);
END CASE;