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; / 

上面的代码生成以下结果:

简单CASE表达式

可选的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;