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: