CASE 语句

CASE 语句根据多个条件选择执行路径。

语法

读取语法图跳过可视语法图 label: CASEsimple-when-clausesearched-when-clauseelse-子句END CASE
simple-when-clause
读取语法图跳过可视语法图表达式WHEN表达式THENSQL 过程语句 ;
searched-when-clause
读取语法图跳过可视语法图WHEN搜索条件THENSQL 过程语句 ;
else-子句
读取语法图跳过可视语法图ELSE SQL 过程语句 ;

描述

标签
指定 CASE 语句的标签。 标签名称不能与例程名称相同,也不能与同一作用域内的另一个标签相同。 有关更多信息,请参阅 对 SQL 标签的引用
simple-when-clause
将使用 WHEN 关键字后面的每个 表达式 的值来测试第一个 WHEN 关键字之前的 表达式 的值是否相等。 如果比较为 true ,那么将执行关联的 THEN 子句中的语句并结束 CASE 语句的处理。 如果结果为未知或 false ,那么处理将继续进行下一次比较。 如果结果与任何比较都不匹配,并且存在 ELSE 子句,那么将执行 ELSE 子句中的语句。
searched-when-clause
对 WHEN 关键字后面的 search-condition 进行求值。 如果求值为 true ,那么将执行关联的 THEN 子句中的语句并结束 CASE 语句的处理。 如果求值为 false 或未知,那么将对下一个 search-condition 进行求值。 如果没有 search-condition 求值为 true 并且存在 ELSE 子句,那么将执行 ELSE 子句中的语句。
else-子句
如果 simple-when-子句Search- when-子句 中指定的条件都不为 true ,那么将执行 else-子句 中的语句。

如果 WHEN 中指定的条件都不为 true ,并且未指定 ELSE 子句,那么将在运行时发出错误,并终止 CASE 语句的执行 (SQLSTATE 20000)。

SQL 过程语句
指定要执行的语句。 请参阅 SQL-procedure-statement

注意

使用 simple-when-子句CASE 语句的嵌套: CASE 语句最多可嵌套三个级别。 使用 搜索时子句 的 CASE 语句对嵌套级别数没有限制。

SQLSTATE 和 SQLCODE 变量的注意事项: 执行 CASE 语句中的第一个 SQL-procedure-statement 时, SQLSTATE 和 SQLCODE SQL 变量反映对该 CASE 语句的 表达式search-conditions 进行求值的结果。 如果 CASE 语句不包含 ELSE 子句,并且没有任何 search-conditions 求值为 true ,那么将返回从 expression 返回的任何错误。

示例

示例 1: 根据 SQL 变量 v_workdept 的值,使用相应的名称更新表 DEPARTMENT 中的列 DEPTNAME。

以下示例显示如何使用 simple-when-clause的语法执行此操作。

               CASE v_workdept
                 WHEN 'A00'
                   THEN UPDATE department SET
                              deptname = 'DATA ACCESS 1';
                 WHEN 'B01'
                   THEN UPDATE department SET
                              deptname = 'DATA ACCESS 2';
                   ELSE UPDATE department SET
                              deptname = 'DATA ACCESS 3';
               END CASE 

示例 2: 以下示例显示如何使用 搜索时子句的语法执行此操作:

               CASE
                 WHEN v_workdept = 'A00'
                   THEN UPDATE department SET
                              deptname = 'DATA ACCESS 1';
                 WHEN v_workdept = 'B01'
                   THEN UPDATE department SET
                              deptname = 'DATA ACCESS 2';
                   ELSE UPDATE department SET
                              deptname = 'DATA ACCESS 3';
               END CASE