Oracle基础教程:单行函数—分支函数

企鹅博客
企鹅博客
企鹅博客
25193
文章
0
评论
2020年8月31日16:48:54 评论 27 views

分支结构

decode

 

if expr1
then
 action1
elif expr2
then
 action2
...
else
 default_action
fi

decode(expr1,search1,result1,search2,result2,...,default)
只能做等值比较

SQL> select ename,deptno,decode(deptno,
     10,'AAAA',
     20,'BBBB',
     'CCCC') from emp order by 2;

ENAME        DEPTNO DECO
---------- ---------- ----
CLARK     10 AAAA
KING     10 AAAA
MILLER     10 AAAA
JONES     20 BBBB
FORD     20 BBBB
ADAMS     20 BBBB
SMITH     20 BBBB
SCOTT     20 BBBB
WARD     30 CCCC
TURNER     30 CCCC
ALLEN     30 CCCC
JAMES     30 CCCC
BLAKE     30 CCCC
MARTIN     30 CCCC

14 rows selected.

SQL>

练习:
 按部分编号涨工资(只打印) 10号部门涨10% 20号部分涨20% 其他部分涨30%

decode
select ename,sal,deptno,
 decode(deptno,10,sal*1.1,
                    20,sal*2.1,
             sal*3.1)
from emp order by deptno;

简单case

select ename,sal,deptno,
 case deptno
  when 10 then sal*1.1
  when 20 then sal*2.1
  else sal*3.1
  end
from emp order by deptno;

search case

select ename,sal,deptno,
 case when deptno=10 then sal*1.1
  when deptno=20 then sal*2.1
  else sal*3.1
 end
from emp order by deptno;

case

 

简单
case expr when search1 then result1
  when search2 then result2
  ....
  else default_result
  end
只能做等值比较

简单case实现的是等值比较(表达式在when之前)
SQL> select ename,sal,case deptno when 10 then 'AAA'
        when 20 then 'BBB'
        else 'CCC'
            end
     from emp order by deptno;
SQL>

ENAME    SAL CAS
---------- ---------- ---
CLARK   2450 AAA
KING   5000 AAA
MILLER   1300 AAA
JONES   2975 BBB
FORD   3000 BBB
ADAMS   1100 BBB
SMITH    800 BBB
SCOTT   3000 BBB
WARD   1250 CCC
TURNER   1500 CCC
ALLEN   1600 CCC
JAMES    950 CCC
BLAKE   2850 CCC
MARTIN   1250 CCC

14 rows selected.

搜索case实现的是不等值比较(表达式在when之后)

select ename,deptno case when deptno=10 then 'aaa'
     when deptno=20 then 'bbb'
     else 'ccc'
    end
from emp;

SQL>  select ename,sal,case  when sal<=1000  then sal+1
            when sal>1000 and sal<=2000 then sal+2
            when sal>2000 and sal<=3000 then sal+3
            else sal+4
       end  "up_sal"
   from emp order by sal;

ENAME    SAL   up_sal
---------- ---------- ----------
SMITH    800      801
JAMES    950      951
ADAMS   1100     1102
WARD   1250     1252
MARTIN   1250     1252
MILLER   1300     1302
TURNER   1500     1502
ALLEN   1600     1602
CLARK   2450     2453
BLAKE   2850     2853
JONES   2975     2978
SCOTT   3000     3003
FORD   3000     3003
KING   5000     5004

继续阅读
企鹅博客
  • 本文由 发表于 2020年8月31日16:48:54
  • 转载请务必保留本文链接:https://www.qieseo.com/184262.html
NUMA导致的Oracle性能问题 Linux-数据库

NUMA导致的Oracle性能问题

背景简介: Oracle版本:11.2.0.4   OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新...
Oracle中IP地址和掩码转换成CIDR格式 Linux-数据库

Oracle中IP地址和掩码转换成CIDR格式

遇到的问题如下:数据库中存储了IP地址,以及IP地址掩码,需要将他们转化成CIDR格式的,并且不仅仅是将掩码转化成CIDR对应的数字的问题,需要将原有的IP地址转化成对应的网络地址,例如IP地址是58...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: