Introduzione alla case case in PL / SQL

L'istruzione CASE in PL / SQL è simile alla condizione IF-ELSEIF in cui sono elencate diverse condizioni all'interno di un blocco e solo quelle istruzioni vengono eseguite per le quali soddisfa la condizione. L'istruzione CASE corrisponde al valore dell'espressione anziché a un'espressione booleana. L'espressione potrebbe essere di qualsiasi tipo di dati e lo stesso tipo di dati deve essere utilizzato nelle istruzioni. Ogni istruzione ha un valore predefinito e se quel valore corrisponde ai valori passati nell'espressione del selettore, quella specifica istruzione viene eseguita. In questo argomento, impareremo l'istruzione CASE in PL / SQL.

Sintassi

Ora che hai un'idea di cosa sia un'istruzione CASE in PL / SQL, diamo un'occhiata alla sintassi dell'istruzione CASE.

CASE (expression)
WHEN THEN statement_l;
WHEN THEN statement_2;
WHEN THEN statement_3;
ELSE default_statement;
END CASE;

Spiegazione del codice

Nella sintassi sopra, l'espressione restituirà un valore di qualsiasi tipo di dati, tutte le istruzioni avranno un valore univoco predefinito, l'espressione CASE passerà attraverso tutte le istruzioni fino a quando non ottiene la corrispondenza esatta definita nell'espressione del valore, in questo caso, Value_1, Value_2 e Value_3. Se l'espressione Case non ha trovato la corrispondenza nell'istruzione, verrà eseguita l'istruzione predefinita.

Si noti che il blocco ELSE è facoltativo e se non si desidera eseguire alcuna istruzione predefinita, è possibile saltare questa istruzione. Il caso END è una parte obbligatoria del caso.

Diagramma di flusso

Come funziona l'istruzione case in PL / SQL?

Sebbene la dichiarazione CASE introdotta in Oracle 9i sia stata ampiamente utilizzata negli altri linguaggi di programmazione. Come altri linguaggi di programmazione, l'istruzione CASE funziona in modo simile.

Oracle 9i supporta due tipi di istruzioni CASE istruzioni CASE semplici e istruzioni CASE ricercate

1. Caso semplice

Nell'istruzione case semplice, un'istruzione viene eseguita se il valore dell'espressione corrisponde alla condizione dichiarata. Queste condizioni dell'istruzione sono predefinite durante la scrittura dell'istruzione CASE. Una volta che il compilatore trova una corrispondenza, si interrompe ed esce dal ciclo dopo aver eseguito l'istruzione evitando ulteriori valutazioni di espressioni non necessarie. Se il compilatore non ha trovato alcuna corrispondenza eseguirà l'istruzione del caso predefinito. Il caso predefinito non è obbligatorio e può essere ignorato.

Sintassi

CASE expression
WHEN condition_1 THEN
statements1
WHEN condition_2 THEN
statements2

ELSE
statements_else
END CASE;

Spiegazione

Come accennato in precedenza, il caso ELSE è facoltativo. Il compilatore valuta innanzitutto l'espressione CASE, quindi confronta l'espressione con la prima condizione. Se la condizione corrisponde all'espressione espressione 1 verrà eseguita, altrimenti viene verificata la condizione 2 e così via.

Vediamo alcuni esempi in tempo reale per comprendere più chiaramente il concetto

SELECT Employee_Name,
CASE rating
WHEN 1 THEN 'Low'
WHEN 3 THEN 'High'
ELSE 'Medium' END
FROM Review;

Supponiamo che esista una tabella di revisione con i dettagli di feedback di fine anno dei dipendenti e devi mostrare il nome e le valutazioni dei dipendenti. Ma invece dei numeri che vuoi mostrare Basso della valutazione è 1, Alto della valutazione è 3 altrimenti medio.

La query scritta sopra produrrà i risultati seguenti

Employee_Name CASECR

------– --

Bogart Low

Nolte Medium

Loren Medium

Gueney High

2. Dichiarazione CASE cercata

L'istruzione CASE cercata è leggermente diversa dalla semplice istruzione CASE. Nell'istruzione Case ricercata anziché in una condizione predefinita, è possibile scrivere una condizione che verrà valutata in fase di esecuzione.

diamo un'occhiata alla sintassi dell'istruzione CASE cercata con questo esempio

CASE
WHEN salary >= 10000 AND salary <=20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 AND salary <= 40000 THEN
AllocateBonus(employee_id, 1000);
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary > 60000 THEN
AllocateBonus(employee_id, 250);
ELSE
AllocateBonus(employee_id, 0);
END CASE;

Supponiamo che il requisito sia quello di assegnare i bonus a un dipendente in base al suo attuale range salariale. Se un dipendente rientra in determinati criteri, la funzione AllocateBonus deve essere richiamata, il che accetta Employ_id e l'importo del bonus come parametri.

Nell'esempio sopra, abbiamo definito diversi intervalli di stipendio e in base a quella funzione AllocateBonus verrà chiamata se lo stipendio rientra nell'intervallo specificato.

Nota : in ogni iterazione, verrà eseguita una e una sola istruzione anche se più istruzioni soddisfano i criteri. Quando le clausole vengono sempre valutate in ordine dall'alto verso il basso.

Suggerimenti

Poiché la clausola WHEN viene valutata in un determinato ordine, ovvero dall'alto verso il basso, si consiglia di elencare le clausole che hanno più probabilità di verificarsi per prime o la frequenza è maggiore. Oltre a quella di qualsiasi clausola WHEN, un'espressione costosa, che richiede molta memoria della CPU, dovrebbe essere presente alla fine nell'ordine al fine di ridurre al minimo le possibilità di esecuzione.

3. Dichiarazione CASE nidificata

Come l'istruzione IF-ELSE nidificata, anche l'istruzione CASE può essere nidificata. La sintassi rimane la stessa solo che quando la condizione esterna soddisfa i criteri passa di nuovo attraverso una serie di affermazioni. Improvvisiamo l'esempio CASE sopra cercato per capire come funziona l'istruzione CASE nidificata.

CASE
WHEN salary >= 10000 THEN
CASE
WHEN salary <= 20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 THEN
AllocateBonus(employee_id, 1000);
END CASE;
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary < 10000 THEN
give_bonus(employee_id, 0);
END CASE;

Spiegazione

Come vedi la sintassi rimane la stessa solo quando la condizione lo soddisfa di nuovo passa attraverso un'istruzione CASE per eseguire finalmente la funzione Allocate.

Conclusione - Dichiarazione CASE in PL / SQL

Ora che abbiamo raggiunto la fine dell'articolo, riassumiamo i punti chiave di cui abbiamo discusso in questo articolo. Abbiamo visto cos'è un'istruzione CASE in PL / SQL, abbiamo appreso la sintassi di base con un esempio. Abbiamo discusso i diversi tipi di istruzione CASE, ad esempio CASE semplice, CASE cercato e l'istruzione CASE nidificata con un esempio. Abbiamo anche appreso come possiamo ottimizzare l'istruzione CASE con il giusto ordine della clausola WHEN.

Articoli consigliati

Questa è una guida all'istruzione CASE in PL / SQL. Qui discutiamo di come funziona l'istruzione Case in PL / SQL con gli esempi e la sintassi. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più -

  1. Che cos'è PL / SQL?
  2. Comandi PL / SQL
  3. Usi di SQL
  4. Carriere in PL / SQL
  5. Dichiarazione IF-Else in Matlab
  6. Loop in PL / SQL