Instruction CASE dans Oracle PL/SQL avec exemples

Qu’est-ce que la déclaration CASE ?

Une instruction CASE est similaire à l'instruction IF-THEN-ELSIF qui sélectionne une alternative en fonction de la condition parmi les options disponibles.

  • L'instruction CASE utilise un « sélecteur » plutôt qu'une expression booléenne pour choisir la séquence.
  • La valeur de l'expression dans l'instruction CASE sera traitée comme un sélecteur.
  • L'expression peut être de n'importe quel type (arithmétique, variables, etc.)
  • Chaque alternative se voit attribuer une certaine valeur prédéfinie (sélecteur), et l'alternative avec la valeur du sélecteur qui correspond à la valeur de l'expression conditionnelle sera exécutée.
  • Contrairement à IF-THEN-ELSIF, l'instruction CASE peut également être utilisée dans les instructions SQL.
  • Le bloc ELSE dans l'instruction CASE contient la séquence qui doit être exécutée lorsqu'aucune des alternatives n'est sélectionnée.

Syntaxe

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Dans la syntaxe ci-dessus, l'expression renverra une valeur qui pourra être de n'importe quel type (variable, nombre, etc.).
  • Chaque clause 'WHEN' est traitée comme une alternative qui a et .
  • La clause 'WHEN' qui correspond à la valeur de celle de l'expression sera sélectionnée, et la clause correspondante sera exécuté.
  • Le bloc 'ELSE' est facultatif et contient le qui doit être exécuté lorsqu'aucune des alternatives ne correspond à la valeur de l'expression.
  • Le 'END' marque la fin de l'instruction CASE et constitue une partie obligatoire de CASE.

1 Exemple: Calcul arithmétique à l'aide du cas

Dans cet exemple, nous allons faire un calcul arithmétique entre deux nombres 55 et 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;
/

Explication du code

  • Ligne de code 2 : Déclarer la variable 'a' comme type de données 'NUMBER' et l'initialiser avec la valeur '55'.
  • Ligne de code 3 : déclarer la variable « b » comme type de données « NUMBER » et l'initialiser avec la valeur « 5 ».
  • Ligne de code 4 : Déclarer la variable 'arth_operation' comme type de données 'VARCHAR2' de taille 20 et l'initialiser avec la valeur 'MULTIPLY'.
  • Ligne de code 6 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 7 : CASE vérifie la valeur de l'expression. Dans ce cas, la valeur de la variable 'arth_operation' est 'MULTIPLY'. Cette valeur sera désormais traitée comme un sélecteur pour cette instruction CASE.
  • Ligne de code 10 : La clause WHEN avec la valeur « MULTIPLY » correspond à la valeur du sélecteur, donc le contrôleur sélectionnera ce bloc d'action et imprimera le message « La multiplication des nombres est : 275 ».
  • Ligne de code 13 : marque la fin de l’instruction CASE.
  • Ligne de code 14 : Impression de la déclaration « Programme terminé ».

Sortie de code

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

CAS RECHERCHÉ Déclaration

L'instruction SEARCHED CASE est similaire à l'instruction CASE, plutôt que d'utiliser le sélecteur pour sélectionner l'alternative, SEARCHED CASE aura directement l'expression définie dans la clause WHEN.

  • La première clause WHEN qui satisfait à la condition sera exécutée et le contrôleur ignorera les alternatives restantes.

Syntaxe

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Dans la syntaxe ci-dessus, chaque clause WHEN a son propre et .
  • La clause WHEN pour laquelle l'expression renvoie TRUE sera exécutée.
  • Le bloc 'ELSE' est facultatif et contient le qui doit être exécuté lorsqu’aucune des alternatives n’est satisfaisante.
  • Le 'END' marque la fin de l'instruction CASE et c'est une partie obligatoire de CASE.

1 Exemple: Calcul arithmétique à l'aide du cas recherché

Dans cet exemple, nous allons faire un calcul arithmétique entre deux nombres 55 et 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;
/

Explication du code

  • Ligne de code 2 : Déclarer la variable 'a' comme type de données 'NUMBER' et l'initialiser avec la valeur '55'.
  • Ligne de code 3 : Déclarer la variable 'b' comme type de données 'NUMBER' et l'initialiser avec la valeur '5'.
  • Ligne de code 4 : déclarer la variable 'arth_operation' comme type de données 'VARCHAR2' de taille 20 et l'initialiser avec la valeur 'DIVIDE'.
  • Ligne de code 6 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 7 : l'instruction SEARCHED CASE commence. Le code de la ligne 8 à la ligne 13 est ignoré car la valeur de leur sélecteur (ADD, SUBTRACT, MULTIPLY) ne correspond pas à la valeur de 'arth_operation'.
  • Ligne de code 14 : L'expression de la clause WHEN « arth_operation = 'DIVIDE' » est satisfaite et l'expression renvoie TRUE.
  • Ligne de code 15 : Action_block de la clause WHEN sera exécuté et le message 'La division des nombres est : 11' sera imprimé.
  • Ligne de code 17 : marque la fin de l’instruction CASE.
  • Ligne de code 18 : Impression de la déclaration « Programme terminé ».

Sortie de code

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

Résumé

TYPE DESCRIPTION UTILISATION
Adhésion Similaire à SI-ALORS-ELSIF déclaration. Un 'SELECTOR' est utilisé pour choisir les alternatives à la place de l'expression booléenne. Utilisé pour sélectionner parmi plusieurs alternatives à l'aide de 'SELECTOR'
CAS RECHERCHÉ Instruction CASE sans véritable « SELECTOR ». Au lieu de cela, il contient la condition réelle (qui est évaluée à VRAI/FAUX) qui sélectionnera les alternatives. Utilisé pour choisir entre plus de deux alternatives pour la plupart.