5.1 CASE语句
1. CASE语句具有如下结构
CASE SELECTOR
WHEN EXPRESSION 1 THEN STATEMENT 1;
WHEN EXPRESSSION 2 THEN STATEMENT 2;
........
WHEN EXPRESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
保留字CASE标识CASE语句的开始。选择器决定哪个WHEN子句应该被执行。每个WHEN子句都包含一个EXPRESSION以及与之关联的一个或者多个可执行语句。ELSE子句是可选的。他的工作方式非常类似于IF-THEN-ELSE语句中所使用的ELSE子句。END CASE是标识CASE语句结束的保留字。注意,选择器只会计算一次。并且会顺序计算WHEN的子句。表达式的值与选择器的值进行比较。如果两种值相等。那么与特定WHEN子句相关的语句会执行,并且随后的WHEN的子句不会计算。如果任何表达式都不匹配选择器的值,则ELSE子句会被选中和执行。
2. 搜索式CASE语句
搜索式CASE语句有个能够产生boolean(true,false,null)的搜索条件,当特定搜索条件计算结果为TRUE时,会执行与该条件相关的语句组合。搜索式CASE语句的语法如下所示:
CASE
WHEN SEARCH CONDIDTION 1 THEN STATEMENT 1;
WHEN SEARCH CONDIDTION2 THEN STATEMENT 2;
........
WHEN SEARCH CONDIDTIONN THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
当搜索条件的计算结果为TRUE时,执行控制权传递与之相关的语句。如果任何搜索条件都不会产生TRUE,则会执行与ELSE子句相关的语句。请注意,ELSE子句是可选的。
3. CASE语句和搜索式CASE语句之间的差别
搜索式的CASE语句没有选择器(可以这么说,因为它产生的是BOOLEN类型的搜索条件,那我们就给他一个函数表达式例如MOD(V_NUM,2)=0判断是TRUE FALSE OR NULL,而CASE语句需要把选择器传入,解释:(V_MUM_FLAG := MOD(V_NUM,2),所以你要在CASE 后面添加V_MUM_FLAG这个选择器 然后判断选择器0(when 0 THEN)
CASE语句
CASE V_MUM_FLAG
WHEN 0 THEN
STATEMEN
搜索式CASE语句
CASE
WHEN MOD(V_NUM,2)=0 THEN
STATEMEN.
5.2 CASE表达式
CASE表达式会返回一个值,这个值会接着被赋予一个变量。是使用复制操作符:=实现的
5.3 NULLIF和COALESCE函数
1. NULLIF函数
NULLIF函数会比较两个表达式。如果两者相同,函数会返回NULL,否则的话,返回第一个表达式的值。
NULLIF结构:
NULLIF(expression1, expression2)
如果expression1 等于 expression2,则NULLIF返回NULL.如果expression1 不等于 expresson2,NULLIF函数返回expression1.注意 NULLIF函数的作用与NVL函数相反。NVL如果第一个表达式是NULL,NVL函数返回第二个表达式。如果第一个表达式不是NULL.NVL返回第一个表达式
NULLIF函数等价于如下CASE表达式
CASE
WHEN EXPRESSION1 = EXPRESSION2 THEN NULL
ELSE EXPRESSION1
END
NULLIF函数存在一个限制:不能把字面值NULL赋予EXPRESSION1,
2. COALESCE[,kəʊə'les]函数
COALESCE的函数会把表达式列表中每一个表达式与NULL比较,并且返回第一个非NULL表达式的值。COALESCE函数具有如下结构
COALESCE(expression1,expression2,.........,expressionN)
如果expression1等于NULL,会计算expressioin2.如果expression2的计算结果部位NULL,这个函数会返回expression2,如果所有表达式的结果都是NULL,则这个函数返回NULL.
5.3.1 NULLIF函数