CASE语句
9I以后才支持的新特性,说叫语句其实是函数。目的是为了分支。
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
SELECT ename, job, sal,
CASE job WHEN 'CLERK' THEN 1.10*sal
WHEN 'SALESMAN' THEN 1.15*sal
WHEN 'ANALYST' THEN 1.20*sal
ELSE sal END "REVISED_SALARY"
FROM emp;
ENAME JOB SAL REVISED_SALARY
-------------------- --------- ---------- --------------
SMITH CLERK 800 880
ALLEN SALESMAN 1600 1840
WARD SALESMAN 1250 1437.5
JONES MANAGER 2975 2975
MARTIN SALESMAN 1250 1437.5
BLAKE MANAGER 2850 2850
CLARK MANAGER 2450 2450
KING PRESIDENT 5000 5000
TURNER SALESMAN 1500 1725
JAMES CLERK 950 1045
FORD ANALYST 3000 3600
MILLER CLERK 1300 1430
Decode函数
Decode函数,和CASE语句一样都是分支语句,但Decode函数是ORACLE自己定义的,其它数据
库可能不支持。
语法如下:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
例题:判别job,不同工作的人赋予不同的工资,除了CLERK,SALESMAN,ANALYST以外,其它的人工资不变,将函数的值起一个别名为REVISED_SALARY。
SELECT ename, job, sal,
decode(job ,'CLERK' , 1.10*sal
,'SALESMAN' , 1.15*sal
,'ANALYST' , 1.20*sal
, sal ) "REVISED_SALARY"
FROM emp;
ENAME JOB SAL REVISED_SALARY
-------------------- --------- ---------- --------------
SMITH CLERK 800 880
ALLEN SALESMAN 1600 1840
WARD SALESMAN 1250 1437.5
JONES MANAGER 2975 2975
MARTIN SALESMAN 1250 1437.5
BLAKE MANAGER 2850 2850
CLARK MANAGER 2450 2450
KING PRESIDENT 5000 5000
TURNER SALESMAN 1500 1725
JAMES CLERK 950 1045
FORD ANALYST 3000 3600
MILLER CLERK 1300 1430
下面的例题是求税率:不同工资上的税率不同。每2000一个台阶,8000以上一律40%的税。
SELECT ename, sal,
DECODE (TRUNC(sal/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30
, 0.40
) TAX_RATE
FROM emp;
ENAME SAL TAX_RATE
-------------------- ---------- ----------
SMITH 800 0
ALLEN 1600 0
WARD 1250 0
JONES 2975 .09
MARTIN 1250 0
BLAKE 2850 .09
CLARK 2450 .09
KING 5000 .2
TURNER 1500 0
JAMES 950 0
FORD 3000 .09
MILLER 1300 0
不管CASE语句还是DECODE函数,他们都是单行函数,每一行都有一个返回值。
从ORACLE角度来讲,DECODE更好,因为各个版本的数据库都支持,横向来说,CASE语句更好,因为它是国标,不同的数据库间都认可。

扫描二维码关注我的微学堂
搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!





