Skip to content

CASE语句

CASE语句在PL/SQL中用于根据不同的条件执行不同的操作。

语法格式

sql
CaseStmt::=
    CASE [case_value] {When_item [When_item]...} {END CASE | ENDCASE} ;
|   CASE [case_value] {When_item [When_item]...} ELSE pl_stmt_list {END CASE | ENDCASE} ; 

When_item::=
    WHEN bool_expr THEN pl_stmt_list

参数说明

  • case_value:可选参数。case_value表达式为When_item中的条件清单,该参数类型同When_item中条件清单类型一致,通过与When_item中条件清单比较,若相同则为true并返回第一个符合条件的值,剩下的case部分将会被自动忽略。
  • WHEN bool_expr THEN pl_stmt_list:用于选择判断,类似于IF..ELSE。在执行时先对条件进行判断,然后根据判断结果做出相应SQL操作,case函数满足某个条件后,剩下的条件将会被自动忽略。因此,即使满足多个条件,也仅执行第一个条件下的SQL操作。
  • CASE:实现一个复杂的条件构造。如果bool_expr求值为真,相应的SQL被执行。如果没有搜索条件匹配,在ELSE子句里的语句被执行,该语句与CASE表达式不同的是CASE语句不允许ELSE NULL子句,且结束标签为END CASE

示例

简单CASE表达式

声明一个变量id作为case_value,根据变量id的值输出不同的字符串。

sql
DECLARE
id INT:=5;
BEGIN
  CASE id
    WHEN 1 THEN
      DBMS_OUTPUT.PUT_LINE('one');
    WHEN 2 THEN
      DBMS_OUTPUT.PUT_LINE('two');
    WHEN 3 THEN
      DBMS_OUTPUT.PUT_LINE('three');
    WHEN 4 THEN
      DBMS_OUTPUT.PUT_LINE('four');
    WHEN 5 THEN
      DBMS_OUTPUT.PUT_LINE('five');
    WHEN 6 THEN
      DBMS_OUTPUT.PUT_LINE('others');
  END CASE;
END;
/

-- 输出结果:
five

搜索CASE表达式

定义一个存储函数case_test_proc,存储函数接受一个输入参数,函数体通过case语句对输入参数进行判断处理,根据输入参数所属范围返回其对应级别。

sql
-- 定义存储函数
CREATE OR REPLACE FUNCTION case_test_proc(x IN INTEGER) RETURN VARCHAR AS
  grade VARCHAR;
BEGIN
  CASE
    WHEN x >= 0 AND x <= 59 THEN
      grade := '不及格';
    WHEN x >= 60 AND x <= 69 THEN
      grade := '及格';
    WHEN x >= 70 AND x <= 79 THEN
      grade := '中';
    WHEN x >= 80 AND x <= 89 THEN
      grade := '良';
    WHEN x >= 90 AND x <= 100 THEN
      grade := '优';
    WHEN x > 100 OR x < 0 THEN
      grade := '输入错误!';
  END CASE;
  RETURN grade;
END;
-- 调用函数并传入参数90
SELECT case_test_proc(90);

EXPR1 |
------------------------------------------------------------------------------
优|