Instruction CASE dans Oracle PL/SQL avec exemples

โšก Rรฉsumรฉ intelligent

L'instruction CASE de PL/SQL sรฉlectionne une alternative parmi plusieurs en fonction d'un sรฉlecteur, ร  l'instar de IF-THEN-ELSIF, mais de maniรจre plus claire. Une instruction CASE simple vรฉrifie la valeur du sรฉlecteur, tandis qu'une instruction CASE avec recherche รฉvalue une condition dans chaque clause WHEN et exรฉcute la premiรจre condition vraie.

  • ๐Ÿ”€ Objectif : CASE choisit un bloc d'actions parmi plusieurs, en utilisant un sรฉlecteur au lieu d'une chaรฎne boolรฉenne.
  • (I.e. sรฉlecteur: L'expression CASE est รฉvaluรฉe une seule fois et comparรฉe ร  chaque valeur WHEN.
  • ???? Dossier recherchรฉ : Insรจre une condition complรจte dans chaque clause WHEN et exรฉcute la premiรจre condition vraie.
  • ๐Ÿงฎ Tout type : Le sรฉlecteur peut รชtre une variable, un nombre ou une expression arithmรฉtique.
  • ๐Ÿ›Ÿ AUTRE: Le bloc ELSE optionnel s'exรฉcute lorsqu'aucune alternative ne correspond.
  • ๐Ÿ”š CAS FINAL : L'instruction END CASE obligatoire clรดt l'instruction.
  • ๐Ÿ‡ง๐Ÿ‡ท Compatible SQL : Contrairement ร  IF, CASE peut รฉgalement รชtre utilisรฉ directement dans les instructions SQL.

Instruction CASE dans Oracle PL / SQL

Qu'est-ce qu'une dรฉclaration CASE ?

Une instruction CASE est similaire ร  l'instruction IF-THEN-ELSIF ; elle sรฉlectionne une alternative parmi les options disponibles en fonction d'une condition.

  • Une 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 est traitรฉe comme un sรฉlecteur.
  • L'expression peut รชtre de tout type (arithmรฉtique, variables, etc.).
  • Chaque alternative se voit attribuer une certaine valeur prรฉdรฉfinie (sรฉlecteur), et l'alternative dont la valeur du sรฉlecteur correspond ร  la valeur de l'expression conditionnelle est exรฉcutรฉe.
  • Contrairement ร  IF-THEN-ELSIF, l'instruction CASE peut รฉgalement รชtre utilisรฉe dans les instructions SQL.
  • Le bloc ELSE d'une instruction CASE contient la sรฉquence ร  exรฉcuter lorsqu'aucune des alternatives n'est sรฉlectionnรฉe.

Syntaxe

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Dans la syntaxe ci-dessus, l'expression renvoie une valeur qui peut รชtre de n'importe quel type.
  • Chaque clause ยซ QUAND ยป est une alternative qui a une et un .
  • La clause ยซ WHEN ยป dont la valeur correspond ร  lโ€™expression est sรฉlectionnรฉe, et sa est exรฉcutรฉ.
  • Le bloc ยซ ELSE ยป est facultatif et contient le ร  exรฉcuter lorsqu'aucune alternative ne correspond.
  • ยซ END ยป marque la fin de l'instruction CASE et constitue une partie obligatoire de CASE.

Exemple 1 : Calcul arithmรฉtique avec CASE

Dans cet exemple, nous effectuons 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;
/

Code Explication

  • Code ligne 2 : Dรฉclaration de la variable 'a' comme 'NUMBER' et initialisation de celle-ci avec la valeur '55'.
  • Code ligne 3 : Dรฉclaration de la variable 'b' comme 'NUMBER' et initialisation de celle-ci avec la valeur '5'.
  • Code ligne 4 : Dรฉclaration de la variable 'arth_operation' comme 'VARCHAR2' de taille 20 et initialisation avec la valeur 'MULTIPLY'.
  • Code ligne 6 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code Ligne 7 : Lโ€™instruction CASE vรฉrifie la valeur de lโ€™expression. Ici, la valeur de ยซ arth_operation ยป est ยซ MULTIPLY ยป, qui est interprรฉtรฉe comme le sรฉlecteur.
  • Code ligne 10 : La clause WHEN avec la valeur 'MULTIPLY' correspond au sรฉlecteur, le contrรดleur sรฉlectionne donc ce bloc d'action et affiche 'Multiplication des nombres : 275'.
  • Code ligne 13 : Marque la fin de lโ€™instruction CASE.
  • Code ligne 14 : Impression du message ยซ Programme terminรฉ ยป.

Code Sortie

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

CAS RECHERCHร‰ Dรฉclaration

L'instruction CASE recherchรฉe est similaire ร  l'instruction CASE, mais au lieu d'utiliser un sรฉlecteur pour choisir l'alternative, l'instruction CASE recherchรฉe dรฉfinit directement la condition dans la clause WHEN.

  • La premiรจre clause WHEN qui satisfait la condition est exรฉcutรฉe, et le contrรดleur ignore les autres alternatives.

Syntaxe

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Dans la syntaxe ci-dessus, chaque clause WHEN possรจde une clause distincte. et .
  • La clause WHEN pour laquelle l'expression renvoie TRUE est exรฉcutรฉe.
  • Le bloc ยซ ELSE ยป est facultatif et contient le exรฉcuter lorsqu'aucune des alternatives n'est satisfaite.
  • ยซ END ยป marque la fin de l'instruction CASE et constitue une partie obligatoire de CASE.

Exemple 1 : Calcul arithmรฉtique utilisant un cas de recherche

Dans cet exemple, nous effectuons 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;
/

Code Explication

  • Code ligne 2 : Dรฉclaration de la variable 'a' comme 'NUMBER' et initialisation de celle-ci avec la valeur '55'.
  • Code ligne 3 : Dรฉclaration de la variable 'b' comme 'NUMBER' et initialisation de celle-ci avec la valeur '5'.
  • Code ligne 4 : Dรฉclaration de la variable 'arth_operation' comme 'VARCHAR2' de taille 20 et initialisation avec la valeur 'DIVIDE'.
  • Code ligne 6 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code Ligne 7 : Dรฉbut de lโ€™instruction CASE recherchรฉe. Les clauses ADD et SUBTRACLes fonctions T et MULTIPLY sont ignorรฉes, car leurs conditions ne correspondent pas ร  la valeur de 'arth_operation'.
  • Code ligne 14 : L'expression de la clause WHEN ยซ arth_operation = 'DIVIDE' ยป est satisfaite et renvoie TRUE.
  • Code ligne 15 : Le bloc d'action de la clause WHEN est exรฉcutรฉ et 'Division des nombres : 11' est imprimรฉ.
  • Code ligne 17 : Marque la fin de lโ€™instruction CASE.
  • Code ligne 18 : Impression du message ยซ Programme terminรฉ ยป.

Code Sortie

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

Comparaison des cas et des cas recherchรฉs

Les deux formulaires choisissent une seule branche, mais ils diffรจrent dans la maniรจre dont la branche est sรฉlectionnรฉe, comme rรฉsumรฉ ci-dessous.

Type Description Utilisation
BOรŽTIER Semblable ร  la SI-ALORS-ELSIF Dans cette instruction, un ยซ sรฉlecteur ยป est utilisรฉ pour choisir l'alternative au lieu d'une expression boolรฉenne. Utilisรฉ pour sรฉlectionner parmi plusieurs alternatives ร  l'aide d'un sรฉlecteur.
CAS RECHERCHร‰ Une instruction CASE sans sรฉlecteur proprement dit. Elle contient plutรดt la condition (qui s'รฉvalue ร  VRAI ou FAUX) permettant de sรฉlectionner l'alternative. Permettait de choisir parmi plus de deux alternatives, gรฉnรฉralement avec des conditions de gamme.

FAQ

Une instruction CASE simple compare une valeur de sรฉlecteur ร  chaque valeur de WHEN. Une instruction CASE avec recherche ne comporte pas de sรฉlecteur et รฉvalue une condition complรจte pour chaque WHEN, ce qui lui permet de gรฉrer les plages et les tests composรฉs.

Oui. Une expression CASE peut apparaรฎtre dans une clause SELECT, WHERE ou ORDER BY, ce qui constitue un avantage clรฉ par rapport ร  IF-THEN-ELSIF, une construction qui ne fonctionne qu'ร  l'intรฉrieur des blocs PL/SQL.

Une instruction CASE lรจve l'exception CASE_NOT_FOUND si aucune branche ne correspond et qu'aucune clause ELSE n'est prรฉsente. L'ajout d'une clause ELSE, mรชme vide (NULL), permet d'รฉviter cette erreur d'exรฉcution.

Oui. Lorsque les branches comparent une expression ร  des valeurs fixes, l'IA peut rรฉรฉcrire la chaรฎne sous la forme d'une instruction CASE plus concise. Vรฉrifiez le rรฉsultat, car une instruction CASE sans ELSE se comporte diffรฉremment d'une instruction ELSIF manquante.

Une instruction CASE exรฉcute un bloc d'actions par branche et se termine par END CASE. Une expression CASE renvoie une seule valeur et se termine par END ; elle peut donc รชtre affectรฉe ร  une variable ou utilisรฉe dans une requรชte SQL.

Rรฉsumez cet article avec :