Dichiarazione del CASO in Oracle PL/SQL con esempi

⚡ Riepilogo intelligente

L'istruzione CASE in PL/SQL seleziona un'alternativa tra diverse opzioni in base a un selettore, in modo simile a IF-THEN-ELSIF ma più chiaro. Un semplice CASE confronta un valore del selettore, mentre un CASE con ricerca valuta una condizione in ogni clausola WHEN ed esegue la prima che risulta vera.

  • 🔀 Scopo: CASE seleziona un blocco di azioni tra molti, utilizzando un selettore anziché una catena booleana.
  • 🎯 Selettore: L'espressione CASE viene valutata una sola volta e confrontata con ciascun valore WHEN.
  • 🔎 CASO ricercato: Inserisce una condizione completa in ogni clausola WHEN ed esegue la prima che risulta vera.
  • 🧮 Qualsiasi tipo: Il selettore può essere una variabile, un numero o un'espressione aritmetica.
  • 🛟 ALTRO: Il blocco ELSE opzionale viene eseguito quando non ci sono corrispondenze alternative.
  • 🔚 CASO FINALE: L'istruzione END CASE è obbligatoria e chiude l'istruzione.
  • ️ Compatibile con SQL: A differenza di IF, CASE può essere utilizzato anche direttamente all'interno delle istruzioni SQL.

Dichiarazione del CASO in Oracle PL / SQL

Che cos'è un'affermazione CASE?

Un'istruzione CASE è simile all'istruzione IF-THEN-ELSIF; seleziona un'alternativa in base a una condizione tra le opzioni disponibili.

  • Un'istruzione CASE utilizza un "selettore" anziché un'espressione booleana per scegliere la sequenza.
  • Il valore dell'espressione nell'istruzione CASE viene trattato come un selettore.
  • L'espressione può essere di qualsiasi tipo (aritmetica, variabili, ecc.).
  • A ciascuna alternativa viene assegnato un determinato valore predefinito (selettore) e viene eseguita l'alternativa il cui valore del selettore corrisponde al valore dell'espressione condizionale.
  • A differenza di IF-THEN-ELSIF, l'istruzione CASE può essere utilizzata anche nelle istruzioni SQL.
  • Il blocco ELSE in un'istruzione CASE contiene la sequenza da eseguire quando nessuna delle alternative è selezionata.

Sintassi

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Nella sintassi sopra riportata, l'espressione restituisce un valore che può essere di qualsiasi tipo.
  • Ogni clausola 'WHEN' è un'alternativa che ha un e un .
  • Viene selezionata la clausola 'WHEN' il cui valore corrisponde all'espressione e la sua viene eseguito.
  • Il blocco 'ELSE' è facoltativo e contiene il da eseguire quando non ci sono alternative corrispondenti.
  • 'END' indica la fine dell'istruzione CASE ed è una parte obbligatoria del CASE.

Esempio 1: Calcolo aritmetico utilizzando CASE

In questo esempio, eseguiamo un calcolo aritmetico tra due numeri, 55 e 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Spiegazione

  • Code riga 2: Dichiarazione della variabile 'a' come 'NUMBER' e sua inizializzazione con il valore '55'.
  • Code riga 3: Dichiarazione della variabile 'b' come 'NUMBER' e sua inizializzazione con il valore '5'.
  • Code riga 4: Dichiarazione della variabile 'arth_operation' come 'VARCHAR2' di dimensione 20 e inizializzazione con il valore 'MULTIPLY'.
  • Code riga 6: Stampa del messaggio "Programma avviato".
  • Code riga 7: CASE controlla il valore dell'espressione. Qui, il valore di 'arth_operation' è 'MULTIPLY', che viene trattato come selettore.
  • Code riga 10: La clausola WHEN con valore 'MULTIPLY' corrisponde al selettore, quindi il controller seleziona questo blocco di azioni e stampa 'La moltiplicazione dei numeri è: 275'.
  • Code riga 13: Indica la fine dell'istruzione CASE.
  • Code riga 14: Stampa del messaggio "Programma completato".

Code Uscita

Program started.
Multiplication of the numbers are: 275
Program completed.

Dichiarazione CASO RICERCATO

L'istruzione CASE con ricerca è simile all'istruzione CASE, ma anziché utilizzare un selettore per scegliere l'alternativa, la condizione nell'istruzione CASE con ricerca è definita direttamente nella clausola WHEN.

  • Viene eseguita la prima clausola WHEN che soddisfa la condizione e il controller ignora le alternative rimanenti.

Sintassi

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Nella sintassi sopra riportata, ogni clausola WHEN ha un separato E .
  • Viene eseguita la clausola WHEN per la quale l'espressione restituisce TRUE.
  • Il blocco 'ELSE' è facoltativo e contiene il da eseguire quando nessuna delle alternative è soddisfacente.
  • 'END' indica la fine dell'istruzione CASE ed è una parte obbligatoria del CASE.

Esempio 1: Calcolo aritmetico utilizzando CASE ricercato

In questo esempio, eseguiamo un calcolo aritmetico tra due numeri, 55 e 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Spiegazione

  • Code riga 2: Dichiarazione della variabile 'a' come 'NUMBER' e sua inizializzazione con il valore '55'.
  • Code riga 3: Dichiarazione della variabile 'b' come 'NUMBER' e sua inizializzazione con il valore '5'.
  • Code riga 4: Dichiarazione della variabile 'arth_operation' come 'VARCHAR2' di dimensione 20 e inizializzazione con il valore 'DIVIDE'.
  • Code riga 6: Stampa del messaggio "Programma avviato".
  • Code riga 7: Inizia l'istruzione CASE cercata. Le clausole per ADD, SUBTRACT e MULTIPLY vengono saltati, poiché le loro condizioni non corrispondono al valore di 'arth_operation'.
  • Code riga 14: L'espressione della clausola WHEN "arth_operation = 'DIVIDE'" è soddisfatta e restituisce TRUE.
  • Code riga 15: Il blocco di azione della clausola WHEN viene eseguito e viene stampato 'La divisione dei numeri è: 11'.
  • Code riga 17: Indica la fine dell'istruzione CASE.
  • Code riga 18: Stampa del messaggio "Programma completato".

Code Uscita

Program started.
Division of the numbers are: 11
Program completed.

Confronto tra CASE e CASE RICERCATO

Entrambe le forme scelgono un ramo, ma differiscono nel modo in cui viene selezionato, come riassunto di seguito.

Tipo Descrizione Impiego
CASI Simile al SE-THEN-ELSIF istruzione. Un 'selettore' viene utilizzato per scegliere l'alternativa anziché un'espressione booleana. Utilizzato per selezionare tra diverse alternative tramite un selettore.
CASO RICERCATO Un'istruzione CASE senza un selettore effettivo. Contiene invece la condizione (che restituisce TRUE o FALSE) che seleziona l'alternativa. Utilizzato per scegliere tra più di due alternative, generalmente con condizioni di intervallo.

DOMANDE FREQUENTI

Un semplice CASE confronta un valore di selettore con ogni valore WHEN. Un CASE con ricerca non ha selettore e valuta una condizione completa in ogni WHEN, quindi gestisce intervalli e test composti.

Sì. Un'espressione CASE può comparire in una clausola SELECT, WHERE o ORDER BY, il che rappresenta un vantaggio fondamentale rispetto a IF-THEN-ELSIF, una struttura che funziona solo all'interno di blocchi PL/SQL.

Un'istruzione CASE genera l'eccezione CASE_NOT_FOUND se non viene trovata alcuna corrispondenza con un ramo e non è presente alcuna istruzione ELSE. L'aggiunta di un'istruzione ELSE, anche un'azione NULL vuota, evita questo errore di runtime.

Sì. Quando i rami confrontano un'espressione con valori fissi, l'IA può riscrivere la catena come un CASE più pulito. Verifica il risultato, poiché un CASE senza un ELSE si comporta in modo diverso da un ELSIF mancante.

Un'istruzione CASE esegue un blocco di azioni per ogni ramo e termina con END CASE. Un'espressione CASE restituisce un singolo valore e termina con END, quindi può essere assegnata a una variabile o utilizzata in SQL.

Riassumi questo post con: