Espressione CASE e Funzione DECODE
Lo statement CASE è come l'istruzione If-Then-Else ma usa la parola chiave WHEN. L'istruzione è di tipo "top to bottom"; se l'espressione soddisfa la prima condizione viene eseguita la corrispondente clausola THEN e l'esecuzione passa all' END, altrimenti viene controllata la condizione 2 e così via; se nessuna condizione è soddisfatta il risultato è fornito da ELSE.
S i n t a s s i
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result_m
END
L'espressione dopo il CASE non è obbligatoria ed è possibile inserirla direttamente dopo la WHEN insieme alla condizione da soddisfare.
E s e m p i o
select LAST_NAME, JOB_ID, SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN 1.10*SALARY
WHEN 'ST_CLERK' THEN 1.15*SALARY
WHEN 'SA_REP' THEN 1.20*SALARY
ELSE SALARY
END AS REVISED_SALARY
from employees;
oppure
select LAST_NAME, JOB_ID, SALARY,
CASE
WHEN JOB_ID = 'IT_PROG' THEN 1.10*SALARY
WHEN JOB_ID = 'ST_CLERK' THEN 1.15*SALARY
WHEN JOB_ID = 'SA_REP' THEN 1.20*SALARY
ELSE SALARY
END AS REVISED_SALARY
from employees;
L'espressione CASE compila con lo standard ANSI SQL mentre la funzione DECODE è specifica della sintassi Oracle.
Esempio:
SELECT LAST_NAME, JOB_ID, SALARY,
DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary,
salary) REVISED_SALARY
FROM employees;
S i n t a s s i
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result_m
END
L'espressione dopo il CASE non è obbligatoria ed è possibile inserirla direttamente dopo la WHEN insieme alla condizione da soddisfare.
E s e m p i o
select LAST_NAME, JOB_ID, SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN 1.10*SALARY
WHEN 'ST_CLERK' THEN 1.15*SALARY
WHEN 'SA_REP' THEN 1.20*SALARY
ELSE SALARY
END AS REVISED_SALARY
from employees;
oppure
select LAST_NAME, JOB_ID, SALARY,
CASE
WHEN JOB_ID = 'IT_PROG' THEN 1.10*SALARY
WHEN JOB_ID = 'ST_CLERK' THEN 1.15*SALARY
WHEN JOB_ID = 'SA_REP' THEN 1.20*SALARY
ELSE SALARY
END AS REVISED_SALARY
from employees;
L'espressione CASE compila con lo standard ANSI SQL mentre la funzione DECODE è specifica della sintassi Oracle.
Esempio:
SELECT LAST_NAME, JOB_ID, SALARY,
DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary,
salary) REVISED_SALARY
FROM employees;