一直以来用case语句都是糊里糊涂的,最近有时间查了下资料,现整理如下。
case语句存在两种形式:case和搜索式case。
二者最主要的区别是:case语句可以设定选择器,由选择器决定需要执行哪组动作;
而搜索式case语句没有选择器,搜索条件按顺序执行,从而决定执行哪组动作。
结构:case语句的结构如下:
case selector
when expression 1 then statement 1;
when expression 2 then statement 2;
......
when expression N then statement N;
else statement N+1;
end case;
搜索式case语句的结构如下:
case
when expression 1 then statement 1;
when expression 2 then statement 2;
......
when expression N then statement N;
else statement N+1;
end case;
工作流程:case语句的工作流程如下:
1.计算选择器;
2.将表达式1与选择器比较,匹配则返回statement
1,结束case语句,否则进行下一步;
3.将表达式2与选择器比较,匹配则返回statement 2,结束case语句,否则进行下一步;
4.以次类推,直到将表达式N与选择器进行比较,匹配则返回statement
N,否回statement N+1 ,
结束case语句。
搜索式case语句的工作流程如下:
1.判断条件1的计算结果是否为真,为真则返回statement
1,结束case语句,否则进行下一步;
2.判断条件1的计算结果是否为真,为真则返回statement
2,结束case语句,否则进行下一步;
3.以此类推,直到判断条件N的计算结果是否为真,为真则返回statement
N,否则返回
statement N+1 ,结束case语句。
示例:
case语句示例:select case
to_char(sysdate,'yyyymm')
when '201001' then
'一月'
when '201002' then
'二月'
when '201003'
then
'三月'