Oracle
 sql >> Database >  >> RDS >> Oracle

Spiegazione di Oracle Case Statement con suggerimenti ed esempi

Abbiamo visto il funzionamento dell'elaborazione Oracle Decode nel post precedente

Elaborazione della decodifica Oracle sql

Ora vediamo l'elaborazione dell'istruzione Oracle Case

Dichiarazione del caso in Oracle

È simile all'istruzione Decode. I database precedenti a Oracle 8.1.6 avevano solo la funzione DECODE. CASE è stato introdotto in Oracle 8.1.6 come funzione standard, più significativa e più potente.

Tutto ciò che DECODE può fare, anche CASE. C'è molto altro che CASE può fare, però, che DECODE non può. Esamineremo esempi dettagliati in questo articolo

Iniziamo con la sintassi dell'istruzione Case

CASE [expression]

when condition_1 then value_1
when condition_2 then value_2
when condition_2 then value_2
….

else value_n
end

l'espressione è facoltativa

Possiamo dividere l'istruzione Case in due categorie Istruzione Caso semplice e Istruzione caso ricercabile

L'istruzione case semplice è proprio come la funzione Decodifica.

Esempio con istruzione CASE semplice

select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

Le istruzioni Case ricercabili sono dichiarazioni case in cui specifichiamo una condizione o un predicato (istruzione case in Oracle con più condizioni)

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else 'Managers'
end Emp_level
from employee_info
where rownum < 5;

EMP_NAME EMP_LEVEL
---------- ---------
JOHN Junior Level
DON Senior Level
BOB Manager
BILL Middle Level

Dichiarazione Oracle Case nidificata

Questa è la dichiarazione del caso all'interno della dichiarazione del caso

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else  (Case when grade ='20'  then 'Vice President'
when grade='21'  then 'Senior Vice President'
else 'Manager'
End)
end Emp_level
from employee_info
where rownum < 5;

Punti importanti sull'istruzione Case semplice e ricercabile

(1) Il CASE ricercato valuta le condizioni indipendentemente in ciascuna delle opzioni "quando". Con questa struttura, è possibile implementare condizioni molto più complesse con un CASE cercato rispetto a un semplice CASE.

(2) Un CASE cercato può combinare più test utilizzando diverse colonne, confronti e operatori AND/OR.

(3) Sia i costrutti CASE semplici che quelli ricercati, le condizioni vengono valutate in sequenza dall'alto verso il basso e l'esecuzione termina dopo che è stata trovata la prima corrispondenza. Quindi, supponiamo che sia vera più di una condizione, viene considerata solo la prima azione.

(4) Oracle Database utilizza la valutazione del cortocircuito. Cioè, per una semplice espressione CASE, il database valuta ogni valore di confronto_espr solo prima di confrontarlo con expr, invece di valutare tutti i valori di confronto_espr prima di confrontarne uno qualsiasi con expr. Di conseguenza, Oracle non valuta mai un confronto_expr se un precedente confronto_expr è uguale a expr. Per un'espressione CASE cercata, il database valuta ogni condizione per determinare se è vera e non valuta mai una condizione se la condizione precedente era vera

Ora vediamo la differenza tra l'istruzione Case e Decode

(1) DECODE può funzionare solo con valori scalari, ma CASE può funzionare con operatori logici, predicati e sottoquery ricercabili.

Sappiamo che la decodifica può funzionare con valori scalari. Non possiamo usarlo per gli operatori logici. Dobbiamo convertirlo in valori scalari per utilizzarlo.

Case rende l'intero processo più semplice. Possiamo facilmente usare l'operatore logico nell'istruzione Case

SQL> select city
, case
when population < 100000
then 'Tier I'
when (population >=100000 and population < 200000)
then 'Tier II'
when (population >= 200000 and population < 300000)
then 'Tier III'
else 'TIER IV'
end City_Tier
from city_info
where rownum < 5;

CITY CITY_TIER
---------- ---------
XYX TIER I
XYZ TIER II
XZW TIER II

Quanto sopra è chiamato Case statement ricercabili

(2) CASE può funzionare come un costrutto PL/SQL ma DECODE viene utilizzato solo nelle istruzioni SQL. CASE può essere utilizzato come parametro di una funzione/procedura.

Esempio

DECLARE

V_x VARCHAR2(10) := 'A';
V_y VARCHAR2(10);

BEGIN

V_y := CASE V_x
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Good'
WHEN 'C' Then 'Average'
ELSE 'Poor'
END;

DBMS_OUTPUT.PUT_LINE(
'Grade V_x is '||V_y||'.'
);

END;
/

Il grado V_x è eccellente.

(3) CASE prevede la coerenza del tipo di dati, DECODE no.

select case 5 when 1 then '1'
2 when '2' then '2'
3 else '5'
4 end
5 from dual;
when '2' then '2'
*
ERROR at line 2:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

(4) CASE è conforme ad ANSI SQL. DECODE è di proprietà di Oracle.

(5) CASE viene eseguito più velocemente nell'ottimizzatore rispetto a DECODE.

(6) CASE è un'istruzione mentre DECODE è una funzione.

Articoli correlati
Esercitazioni su Oracle sql:elenco di tutte le lezioni di esercitazione su sql che possono essere utilizzate per padroneggiare sql e utilizzare nella gestione e manipolazione dei dati RDBMS (Oracle, MySql)
Domande sull'intervista Oracle:dai un'occhiata a questa pagina per le 49 principali Domande e risposte su Oracle Interview:Nozioni di base, Oracle SQL per aiutarti nelle interviste.
Record Oracle PLSQL:dai un'occhiata a questo articolo sul funzionamento dei record Oracle PLSQL. Inoltre, scopri i vari modi per definirlo e assegnargli un valore
Strumento per sviluppatori Oracle SQL:dai un'occhiata a questa pagina per tutte le informazioni sullo strumento per sviluppatori Oracle sql,Come eseguire il download per sviluppatori Oracle sql, come installarlo
Funzioni della data di Oracle:dai un'occhiata a questo post per le funzioni della data di Oracle, la differenza di data di Oracle in anni, la differenza di data di Oracle in giorni, la differenza di data di Oracle in mesi.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Corsi consigliati

Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque voglia essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento per sviluppatori Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql