SQL 过程中的 CASE 语句

可使用 CASE 语句来根据条件满足状态而有条件进入某个逻辑。

有两种类型的 CASE 语句:
  • 简单 CASE 语句:用于根据字面值进入某个逻辑
  • 搜索式 CASE 语句:用于根据表达式的值进入某个逻辑

CASE 语句的 WHEN 子句定义满足条件时用于确定控制流的值。

以下是带有简单 CASE 语句 WHEN 子句的 CASE 语句的 SQL 过程示例:
  CREATE PROCEDURE UPDATE_DEPT (IN p_workdept)
  LANGUAGE SQL
  BEGIN

    DECLARE v_workdept CHAR(3);
    SET v_workdept = p_workdept;

    CASE  v_workdept
      WHEN 'A00' THEN
        UPDATE department SET deptname = 'D1';
      WHEN 'B01' THEN
        UPDATE department SET deptname = 'D2';
      ELSE
        UPDATE department SET deptname = 'D3';
      END CASE

  END
以下是带有搜索式 CASE 语句 WHEN 子句的 CASE 语句的示例:
  CREATE PROCEDURE UPDATE_DEPT (IN p_workdept)
  LANGUAGE SQL
  BEGIN

    DECLARE v_workdept CHAR(3);
    SET v_workdept = p_workdept;

    CASE
      WHEN v_workdept = 'A00' THEN
        UPDATE department SET deptname = 'D1';
      WHEN v_workdept = 'B01' THEN
        UPDATE department SET deptname = 'D2';
      ELSE
        UPDATE department SET deptname = 'D3';
    END CASE

  END

上面提供的示例逻辑上是等价的,但要注意的是,带有搜索式 CASE 语句 WHEN 子句的 CASE 语句功能非常强大。可在其中使用任何受支持 SQL 表达式。这些表达式可包含变量、参数、专用寄存器及其他对象的引用。