Cos'è la dichiarazione CASE?
Un'istruzione CASE è simile all'istruzione IF-THEN-ELSIF che seleziona un'alternativa in base alla condizione dalle opzioni disponibili.
- L'istruzione CASE utilizza "selector" anziché un'espressione booleana per scegliere la sequenza.
- Il valore dell'espressione nell'istruzione CASE verrà considerato come un selettore.
- L'espressione potrebbe essere di qualsiasi tipo (aritmetica, variabili, ecc.)
- A ciascuna alternativa viene assegnato un determinato valore predefinito (selettore) e verrà eseguita l'alternativa con il valore del selettore che 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 nell'istruzione CASE contiene la sequenza che deve essere eseguita quando nessuna delle alternative è stata selezionata.
Sintassi:
CASE (expression)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN 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.).
- Ogni clausola "WHEN" viene trattata come un'alternativa con
e . - Verrà selezionata la clausola "WHEN" che corrisponde al valore di quello dell'espressione e verrà eseguito il
corrispondente. - Il blocco 'ELSE' è opzionale e contiene
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 Case
In questo esempio, eseguiremo calcoli aritmetici tra due numeri 55 e 5.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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 "NUMERO" e inizializzazione con valore "55".
- Riga codice 3: dichiarazione della variabile "b" come tipo di dati "NUMERO" e inizializzazione con valore "5."
- Riga di codice 4: dichiarazione della variabile "arth_operation" come tipo di dati "VARCHAR2" di dimensione 20 e inizializzazione con valore "MULTIPLY".
- Riga di codice 6: stampa dell'istruzione "Programma avviato".
- Riga di codice 7: CASE controlla il valore dell'espressione. In questo caso, il valore della variabile "arth_operation" è "MULTIPLY". Questo valore verrà ora considerato 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 "La moltiplicazione dei numeri sono: 275".
- Riga di codice 13: segna la fine dell'istruzione CASE.
- Riga di codice 14: stampa dell'istruzione "Programma completato".
Uscita codice:
Program started.Multiplication of the numbers are: 275Program completed.
Istruzione SEARCHED CASE
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.
- La prima clausola WHEN che soddisfa la condizione verrà eseguita e il controller salterà le restanti alternative.
Sintassi:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- Nella sintassi precedente, ogni clausola WHEN ha
e separati. - Verrà eseguita la clausola WHEN per la quale l'espressione restituisce TRUE.
- Il blocco 'ELSE' è opzionale e contiene
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 ricercato
In questo esempio, eseguiremo calcoli aritmetici tra due numeri 55 e 5.
DECLARE a NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='DIVIDE';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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 "NUMERO" e inizializzazione con valore "55".
- Riga codice 3: dichiarazione della variabile "b" come tipo di dati "NUMERO" e inizializzazione con valore "5".
- Riga di codice 4: dichiarazione della variabile "arth_operation" come tipo di dati "VARCHAR2" di dimensione 20 e inizializzazione con il valore "DIVIDE".
- Riga di codice 6: stampa dell'istruzione "Programma avviato".
- Riga di codice 7: inizia l'istruzione SEARCHED CASE. Il codice dalla riga 8 alla riga 13 viene ignorato poiché il valore del selettore (ADD, SUBTRACT, MULTIPLY) non corrisponde al valore di "arth_operation".
- Riga di codice 14: l'espressione della clausola WHEN "arth_operation = 'DIVIDE'" è soddisfatta e l'espressione restituisce TRUE.
- Riga di codice 15: Action_block della clausola WHEN verrà eseguito e verrà stampato il messaggio "Divisione dei numeri: 11".
- Riga di codice 17: segna la fine dell'istruzione CASE.
- Riga di codice 18: stampa dell'istruzione "Programma completato".
Uscita codice:
Program started.Division of the numbers are: 11Program completed.
Sommario
GENERE | DESCRIZIONE | UTILIZZO |
---|---|---|
ASTUCCIO |
Simile all'istruzione IF-THEN-ELSIF. Un "SELETTORE" viene utilizzato per scegliere le alternative invece dell'espressione booleana. |
Utilizzato per selezionare tra diverse alternative utilizzando "SELETTORE" |
CASO RICERCATO |
Istruzione CASE senza "SELECTOR" effettivo. Invece, contiene la condizione effettiva (che restituisce VERO / FALSO) che selezionerà le alternative. |
Utilizzato principalmente per scegliere tra più di due alternative. |