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 |
------------------------------------------------------------------------------
优|