Dichiarazione del CASO in Oracle PL/SQL con esempi

Cos'è la dichiarazione CASE?

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

  • L'istruzione CASE utilizza un "selettore" anziché un'espressione booleana per scegliere la sequenza.
  • Il valore dell'espressione nell'istruzione CASE verrà 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 l'alternativa con valore del selettore che corrisponde al valore dell'espressione condizionale verrà eseguita.
  • A differenza di IF-THEN-ELSIF, l'istruzione CASE può essere utilizzata anche nelle istruzioni SQL.
  • Il blocco ELSE nell'istruzione CASE contiene la sequenza che deve essere eseguita quando nessuna delle alternative è stata selezionata.

Sintassi

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Nella sintassi precedente, l'espressione restituirà un valore che potrebbe essere di qualsiasi tipo (variabile, numero, ecc.).
  • Ciascuna clausola "WHEN" viene trattata come un'alternativa che ha E .
  • Verrà selezionata la clausola 'WHEN' che corrisponde al valore di quello dell'espressione, e quella corrispondente verrà eseguito.
  • Il blocco 'ELSE' è facoltativo e contiene il file che deve essere eseguito quando nessuna delle alternative corrisponde al valore dell'espressione.
  • 'END' segna la fine dell'istruzione CASE ed è una parte obbligatoria del CASE.

Esempio 1: Calcolo aritmetico utilizzando il caso

In questo esempio, eseguiremo 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;
/

Spiegazione del codice

  • Riga di codice 2: dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '55'.
  • Riga di codice 3: dichiarazione della variabile 'b' come tipo di dati 'NUMBER' e inizializzazione con il valore '5.'
  • Riga di codice 4: Dichiarazione della variabile 'arth_Operation' come tipo di dati 'VARCHAR2' di dimensione 20 e inizializzazione con il valore 'MULTIPLY'.
  • Riga di codice 6: Stampa della dicitura “Programma avviato”.
  • Riga di codice 7: CASE controlla il valore dell'espressione. In questo caso il valore della variabile 'arth_operazione' è 'MULTIPLY'. Questo valore verrà ora trattato come un selettore per questa istruzione CASE.
  • Riga di codice 10: La clausola WHEN con valore 'MULTIPLY' corrisponde al valore del selettore, quindi il controller selezionerà questo action_block e stamperà il messaggio 'Moltiplicazione dei numeri sono: 275'.
  • Code line13: segna la fine dell'istruzione CASE.
  • Riga codice14: Stampa della dicitura “Programma completato”.

Uscita del codice

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

Dichiarazione CASO RICERCATO

L'istruzione SEARCHED CASE è simile all'istruzione CASE, invece di utilizzare il selettore per selezionare l'alternativa, SEARCHED CASE avrà direttamente l'espressione definita nella clausola WHEN.

  • Verrà eseguita la prima clausola WHEN che soddisfa la condizione e il controller salterà le restanti alternative.

Sintassi

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Nella sintassi precedente, ciascuna clausola WHEN ha la clausola separata E .
  • Verrà eseguita la clausola WHEN per la quale l'espressione restituisce TRUE.
  • Il blocco 'ELSE' è facoltativo e contiene il file che deve essere eseguito quando nessuna delle alternative soddisfa.
  • 'END' segna la fine dell'istruzione CASE ed è una parte obbligatoria di CASE.

Esempio 1: Calcolo aritmetico utilizzando il caso cercato

In questo esempio, eseguiremo 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;
/

Spiegazione del codice

  • Riga di codice 2: dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '55'.
  • Riga di codice 3: dichiarazione della variabile 'b' come tipo di dati 'NUMBER' e inizializzazione con il valore '5'.
  • Riga di codice 4: dichiarazione della variabile 'arth_operazione' come tipo di dati 'VARCHAR2' di dimensione 20 e inizializzazione con il valore 'DIVIDE.'
  • Riga di codice 6: Stampa della dicitura “Programma avviato”.
  • Riga di codice 7: inizia l'istruzione SEARCHED CASE. Il codice dalla riga 8 alla riga 13 viene saltato poiché il valore del loro selettore (ADD, SUBTRACT, MULTIPLY) non corrisponde al valore di 'arth_operazione'.
  • Riga di codice 14: L'espressione della clausola WHEN “arth_operazione = 'DIVIDE'” è soddisfatta e l'espressione restituisce TRUE.
  • Riga di codice 15: Verrà eseguito il blocco_azione della clausola WHEN e verrà stampato il messaggio 'Divisione dei numeri: 11'.
  • Riga di codice 17: segna la fine dell'istruzione CASE.
  • Riga di codice 18: Stampa della dicitura “Programma completato”.

Uscita del codice

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

Sommario

TIPO DESCRIZIONE USO
CASSA Simile a SE-THEN-ELSIF dichiarazione. Un 'SELETTORE' viene utilizzato per scegliere le alternative invece dell'espressione booleana. Utilizzato per selezionare tra diverse alternative utilizzando 'SELECTOR'
CASO RICERCATO Istruzione CASE senza un vero e proprio 'SELECTOR'. Contiene invece la condizione effettiva (che restituisce TRUE/FALSE) che selezionerà le alternative. Principalmente sceglievo tra più di due alternative.