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

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

简单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;