oracle:case 语句使用
case 语句带有选择效果知返回第一个条件满足要求的语句,即语句一语句二都的判断都为 true ,返回排在前面的。
case 的语法根据放置的位置不同而不同。
一.case 语句
CASE SELECTOR WHEN EXPRESSION_1 THEN STATEMENT_1; [WHEN EXPRESSION_2 THEN STATEMENT_2;] [...] [ELSE STATEMENT_N+1 ;] END CASE;
这个是一般语句,注意 在then 后面需要 ; 分号,而且结束的时候 是 END CASE ;
CASE v_element WHEN xx THEN yy; WHEN xxx THEN yyy; ELSE yyyy; END CASE;
当v_element 等于 xx 时,执行 yy 语句,如果很长可以 前后加 begin 和 end,判断的条件是 v_element =xx ,xx是 具体值。
二.搜索式 case 语句
CASE WHEN SEARCH_CONDITION_1 THEN STATEMENT_1; [WHEN SEARCH_CONDITION_1 THEN STATEMENT_2;] [...] [ELSE STATEMENT_N+1 ;] END CASE;
CASE WHEN v_element=xx THEN yy; WHEN v_element=xxx THEN yyy; ELSE yyyy; END CASE;
按顺序执行 选择条件 ,可以是 < > = 等,然后执行后面的语句,遇到一个为true 时将停止。
三.case表达式
前两个可以归一类,起码写法上类似,用case 语句做表达式,意思是可以这么写:
v_element:= CASE xx WHEN x THEN y ELSE yy END; or select CASE xx WHEN x THEN y ELSE YY END ....
就是把case 放在一条语句里面, 删除 END CASE 中的CASE 和 最后的 ; 分号,中间语句的分号也要删掉。
可以把 case 至 end 看成一个值,最后面的分号是语句的要求,类似 a:= v ; 这样的写法。
四.NULLIF
这个是case 的变种函数,结构 :
NULLIF(xx,yy );
如果 xx = yy ,则返回 NULL, 如果不等啫返回 xx。
注意,在这函数中xx 参数不能为 NULL,即
NULLIF(NULL,0);
是错的。
五.COALESCE
把表达式中的每个表达式与NULL比较,返回第一个非NULL 的表达式的值。结构如下:
COALSECE (x1,x2,...,xn);
写法上可以将最后的写为0 ,这么就类似于CASE 中的else 选项。