Oracle CASE statement

CASE is an extended version of decode in Oracle.

( Read about decode here – Oracle DECODE function )

Syntax :-

CASE [expression]

when condition_1 then value_1

when condition_2 then value_2

….

else value_n

end

expression is optional

CASE can be used in PL/SQL too.

Examples:-

Consider below tables and data.

DEPT

DEPTNO               DEPTNAME                                   LOCATION
———-               —————-                            ——————
1                              HR                                                  London
2                              Marketing                                      Newyork
3                              Accounts                                        Paris
4                              Sales                                              Tokyo
5                              Operations                                     Bejing
6                               Inventory                                      Dubai

EMP

EMPNO   EMPNAME           DOB                    SALARY    MANAGER       DEPTNO

———————————————————————————–

10              Bill                    02-JAN-50            12000        NULL                    5
11              Solomon          02-FEB-75             10000       Bill                        5
12              Susan               22-JAN-76             10000        Bill                       5
13              Wendy             22-MAR-56           9000          Solomon              1
14              Benjamin          02-JUN-79            7500          Solomon             1
15              Tom                  22-JAN-77            7600          Solomon              1
16              Henry               16-MAR-86            8500         Solomon              2
17             Robert              30-JUL-79              9500          Susan                   2
18              Paul                 22-JAN-77             7700          Solomon              2
19              Dora                01-MAR-81            8500          Solomon              3
20             Samuel           10-APR-82               6900           Susan                  3

21             Mary                 22-SEP-83               7500           Susan                 3

22             Daniel               16-MAY-71           6500            Susan                  4
23             Ricardo            15-OCT-72             7800           Susan                  4
24             Mark                  26-NOV-74           7200           Susan                  4

1) Simple CASE statement – with expression

select empno,salary,
CASE salary
when 12000 then ‘high’
when 10000 then ‘good’
else ‘ok’
END details
from emp where empno in (10,11,12,13,14);

SALARY    DETAILS

———-      ————

12000          high
10000         good
10000         good
9000           ok
7500           ok

2) Simple CASE statement – without expression

select salary,
case
when salary = 12000 then ‘high’
when salary = 10000 then ‘good’
else ‘ok’
end salary_details
from emp where empno in (10,11,12,13,14);

SALARY    DETAILS

———-      ————

12000          high
10000         good
10000         good
9000           ok
7500           ok

3) CASE statement with sqls.

select salary,empno,
case (select salary from emp where empno = e.empno)
when 12000 then ‘high’
when 10000 then (select ‘good’ from dual)
else ‘ok’
end salary_details
from emp e where e.empno in (10,11,12,13,14);

SALARY    DETAILS

———-      ————

12000          high
10000         good
10000         good
9000           ok
7500           ok

4) CASE in PL/SQL

declare
          n_salary number;
          v_details varchar2(20);
begin
     n_salary := 12000;
    v_details :=
        case n_salary
              when 12000 then ‘high’
              when 10000 then ‘good’
              else ‘ok’
     end;
  dbms_output.put_line( v_details);
end;

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s