이름, 월급, 보너스를 출력하는데 보너스가 월급이 2500 이상이면 900을 출력하고 그렇지 않으면 0 을 출력하시오
-- 에러 발생
select ename, sal, decode( sal >= 2500, 900, 0 ) as 보너스
from emp;
ORA-00907: 누락된 우괄호
https://docs.oracle.com/error-help/db/ora-00907/00907. 00000 - "missing right parenthesis"
*Document: YES
*Cause: A left parenthesis was entered without a closing
right parenthesis, or there was unrecognized information in the
parentheses. All parentheses must be entered in pairs.
*Action: Correct the syntax and retry the statement.
1행, 32열에서 오류 발생
💡 decode --> 등호
(=)
비교만 가능
case 문 --> 등호(=)
부등호(>=, <=, >, <
) 비교 모두 가능
select ename, sal, case when sal >= 2500 then 900
else 0 end as 보너스
from emp;
select ename, sal, case when sal >= 3000 then 300
when sal >= 2000 then 200
else 100 end as 보너스
from emp;
💡
case 문법: case when 조건1 then 값1 when 조건2 then 값2 when 조건3 then 값3 else 값4 end as "별칭"
나이가 30살 이상이면 A, 나이가 28살 이상이면 B, 25살이상이면 C, 나머지 나이는 D 로 등급을 출력되게하시오
select ename, age, case when age >= 30 then 'A'
when age >= 28 then 'B'
when age >= 25 then 'C'
else 'D' end as 등급
from emp21;
select ename, age, case when age >= 30 then 'A'
when age >= 28 then 'B'
when age >= 25 then 'C'
else 'D' end as 등급
from emp21
order by 3;
select ename, hiredate, to_char(hiredate, 'RRRR')
from emp;
select ename, hiredate, to_char(hiredate, 'RRRR')
from emp
where to_char(hiredate, 'RRRR') = '1981';
select ename, hiredate, to_char(hiredate, 'RRRR'),
case when to_char(hiredate, 'RRRR') = '1980' then 500
when to_char(hiredate, 'RRRR') = '1981' then 400
else 0 end as 보너스
from emp;
select ename, age, telecom, case when lower(telecom) like '%SK%' then 600
when lower(telecom) like '%KT%' then 500
else 400 end as 보너스
from emp21;
select ename, age, case when ename like '김%' then 600
when ename like '이%' then 500
when ename like '박%' or ename like '최%' then 400
else 300 end as 보너스
from emp21;