Espressioni CASE

Le espressioni CASE consentono di utilizzare la logica IF ... THEN ... ELSE nelle espressioni.

In un'espressione CASE semplice, CASE cerca la prima coppia WHEN ... THEN per la quale l'argomento expr è uguale all'argomento comparison_expr, quindi restituisce return_expr. Se nessuna delle coppie WHEN ... THEN soddisfa tale condizione ed esiste una clausola ELSE, CASE restituisce else_expr. In caso contrario, CASE restituisce un valore nullo.

In un'espressione CASE con esecuzione di ricerca, CASE esegue una ricerca da sinistra a destra finché non trova una ricorrenza vera dell'argomento condition, quindi restituisce return_expr. Se non viene rilevato alcun argomento condition vero ed esiste una clausola ELSE, CASE restituisce else_expr. In caso contrario, CASE restituisce un valore nullo.

Valore restituito

Identico a quello dell'argomento else_expression.

Sintassi

CASE { simple_case_expression
     | searched_case_expression
     }
     [ ELSE else_expression ]
     END

simple_case_expression::=
     expr WHEN comparison_expr
          THEN return_expr
          [ WHEN comparison_expr
            THEN return_expr ]...

searched_case_expression::=
     WHEN condition THEN return_expr
     [ WHEN condition THEN return_expr ]...

Argomenti

expr è l'espressione di base di cui si esegue il test.

comparison_expr è l'espressione con cui viene confrontata l'espressione dell'argomento expr. Deve essere dello stesso tipo di dati di base (numerico o testo) di expr.

condition è un'espressione condizionale.

return_expr è il valore restituito quando viene trovata una corrispondenza oppure quando la condizione è vera.

Esempio

L'istruzione riportata di seguito restituisce Low, Medium o High a seconda del valore di credit_limit:

CASE credit_limit WHEN 100 THEN 'Low'
   WHEN 5000 THEN 'High'
   ELSE 'Medium'

L'istruzione successiva restituisce lo stipendio effettivo se maggiore o uguale a 2000 oppure 2000 se lo stipendio inferiore a tale valore.

CASE WHEN salary > 2000 THEN salary
   ELSE 2000 END