Instruction Oracle PL/SQL IF THEN ELSE : ELSIF, NESTED-IF

Que sont les déclarations décisionnelles ?

Les déclarations de prise de décision sont celles qui décideront du contrôle de flux de SQL déclarations basées sur les conditions. Cela donne au programmeur un meilleur contrôle pour empêcher l'exécution d'un code particulier (schéma 1) ou pour choisir un code souhaité en fonction de la condition (schéma 2). Vous trouverez ci-dessous la représentation graphique de la « Déclaration de prise de décision ».

Diagramme de déclaration de prise de décision
Diagramme de déclaration de prise de décision

Types de déclarations de prise de décision :

Oracle fournit le suiviwing types de déclarations de prise de décision.

  • SI DONC
  • SI-ALORS-SINON
  • SI-ALORS-ELSIF
  • Imbriqué-IF
  • Adhésion
  • CAS RECHERCHÉ

Déclaration SI-ALORS

L'instruction IF-THEN est principalement utilisée pour exécuter une section particulière de codes uniquement lorsque la condition est satisfaite.

La condition devrait donner Boolean (Vrai faux). Il s'agit d'une instruction conditionnelle de base qui permettra à ORACLE d'exécuter/sauter un morceau de code particulier en fonction des conditions prédéfinies.

Syntaxe des instructions IF THEN :

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • Dans la syntaxe ci-dessus, le mot-clé « IF » sera suivi d'une condition qui est évaluée à « TRUE »/« FALSE ».
  • Le contrôle exécutera le seulement si la condition revient .
  • Dans le cas d’une condition évaluée à alors, SQL ignorera le , et il commencera à exécuter le code à côté du bloc 'END IF'.

Remarque: Chaque fois que la condition est évaluée à « NULL », SQL traitera « NULL » comme « FALSE ».

Exemple 1: Dans cet exemple, nous allons imprimer un message lorsque le nombre est supérieur à 100. Pour cela, nous exécuterons la commande suivantewing code

Pour imprimer un message lorsqu'un nombre a une valeur supérieure à 100, nous exécutons la procédure suivantewing code.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
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 '10'.
  • Ligne de code 4 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 5 : Vérification de la condition, si la variable « a » est supérieure à « 100 ».
  • Ligne de code 6 : Si « a » est supérieur à « 100 », alors « a est supérieur à 100 » sera imprimé. Si « a » est inférieur ou égal à 100, alors la condition échoue, donc l'instruction d'impression ci-dessus est ignorée.
  • Ligne de code 8 : Impression de la déclaration « Programme terminé ».

Sortie de code :

Program started.
Program completed.

2 Exemple: Dans cet exemple, nous allons imprimer un message si un alphabet donné est présent dans les voyelles anglaises (A, E, I, O, U).

Pour imprimer un message lorsque le caractère donné est une voyelle, nous exécutons la commande suivantewing code.

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

Explication du code :

  • Ligne de code 2 : Déclarer la variable 'a' comme 'CHAR' de type de données de taille '1' et l'initialiser avec la valeur 'u'.
  • Ligne de code 4 : Vérifier la condition, si la variable 'a' est présente dans la liste ('A', 'E', 'I', 'O', 'U').
  • La valeur de « a » a été convertie en majuscules avant la comparaison afin que la comparaison ne soit pas sensible à la casse.
  • Ligne de code 5 : Si « a » est présent dans la liste, alors la déclaration « Le caractère est en voyelles anglaises » sera imprimée. Si la condition échoue, alors ce programme ne donnera aucune sortie, car en dehors du bloc IF-THEN, nous n'avons émis aucune instruction d'impression.

Sortie de code :

The character is in English Vowels

Instruction SI-ALORS-ELSE

  • L'instruction IF-THEN-ELSE est principalement utilisée pour choisir entre deux alternatives en fonction de la condition.
  • Vous trouverez ci-dessous la représentation syntaxique de l'instruction IF-THEN-ELSE.

Syntaxe des instructions IF-THEN-ELSE :

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • Dans la syntaxe ci-dessus, le mot-clé « IF » sera suivi d'une condition qui est évaluée à « TRUE »/« FALSE ».
  • Le contrôle exécutera le seulement si la condition revient .
  • En cas d'état, il est évalué à alors, SQL exécutera .
  • Dans tous les cas, l'un des deux blocs d'action sera exécuté.

Remarque: Chaque fois que la condition est évaluée à « NULL », SQL traitera « NULL » comme « FALSE ».

Exemple 1: Dans cet exemple, nous allons imprimer un message indiquant si le nombre donné est pair ou impair.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
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 '11'.
  • Ligne de code 4 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 5 : Vérification de la condition, si le module de la variable « a » par « 2 » est égal à 0.
  • Ligne de code 6 : Si « 0 », alors « a est un nombre pair » sera imprimé.
  • Ligne de code 7 : Si la valeur du module n'est pas égale à « 0 », alors la condition renvoie , donc le message « a est un nombre impair » sera imprimé.
  • Ligne de code 10 : Impression de la déclaration « Programme terminé »

Sortie de code :

Program started.
a is odd number
Program completed.

Instruction IF-THEN-ELSIF

  • L'instruction IF-THEN-ELSIF est principalement utilisée lorsqu'une alternative doit être choisie parmi un ensemble d'alternatives, où chaque alternative a ses propres conditions à satisfaire.
  • Les premières conditions qui reviennent sera exécuté et les conditions restantes seront ignorées.
  • L'instruction IF-THEN-ELSIF peut contenir le bloc « ELSE ». Ce bloc 'ELSE' sera exécuté si aucune des conditions n'est remplie.

Notes: Le bloc ELSE est facultatif dans cette instruction conditionnelle. S'il n'y a pas de bloc ELSE et qu'aucune des conditions n'est remplie, le contrôleur ignorera tout le bloc d'action et commencera à exécuter la partie restante du code.

Syntaxe des instructions IF-THEN-ELSIF :

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • Dans la syntaxe ci-dessus, le contrôle exécutera le seulement si la condition1 renvoie .
  • Si la condition 1 n’est pas satisfaite, le contrôleur vérifiera la condition 2.
  • Le contrôleur quittera l'instruction IF dans la suitewing deux cas.
    • Lorsque le contrôleur a trouvé une condition qui renvoie . Dans ce cas, le bloc d'action correspondant sera exécuté et le contrôleur quittera ce bloc d'instruction IF et commencera à exécuter le code restant.
    • Lorsqu'aucune des conditions n'est remplie, le contrôleur alors exécutera le bloc ELSE s'il est présent, puis quittera l'instruction IF.

Remarque: Chaque fois que la condition est évaluée à « NULL », SQL traitera « NULL » comme « FALSE ».

1 Exemple: Sans bloc ELSE

Dans cet exemple, nous allons imprimer la note en fonction des notes données sans autre condition (note >= 70 Grade A, note >=40 et note <70 Grade B, note >=35 et note <40 Grade C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

Explication du code :

  • Ligne de code 2 : Déclarer la variable 'mark' comme type de données 'NUMBER' et l'initialiser avec la valeur '55'.
  • Ligne de code 4 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 5 : Vérification de la condition 1, si la « marque » est supérieure ou égale à 70.
  • Ligne de code 7 : Puisque la condition1 a échoué, alors la condition2 '70>mark>=40' est vérifiée.
  • Ligne de code 8 : La condition2 renvoie , c'est pourquoi le message « Grade B » sera imprimé.
  • Ligne de code 12 : Impression de la déclaration « Programme terminé ».
  • Dans ce cas, la condition3 'mark < 35' sera ignorée, car le contrôleur a trouvé une condition qui renvoie avant la condition3.

Sortie de code :

Program started.
Grade B
Program completed.

Exemple 2: Avec le bloc ELSE

Dans cet exemple, nous allons imprimer la note en fonction des notes données avec la condition else (note >= 70 Grade A, note >=40 et note <70 Grade B, note >=35 et note <40 Grade C, sinon « Pas de note »).

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

Explication du code :

  • Ligne de code 2 : Déclarer la variable 'mark' comme type de données 'NUMBER' et l'initialiser avec la valeur '25'.
  • Ligne de code 4 : Impression de la déclaration « Programme démarré ».
  • Ligne de code 5 : Vérification de la condition 1, si la « marque » est supérieure ou égale à 70.
  • Ligne de code 7 : Puisque la condition1 a échoué, alors la condition2 '70>mark>=40' est vérifiée.
  • Ligne de code 8 : Puisque la condition2 a échoué, alors la condition3 '40>mark>=35' est vérifiée.
  • Ligne de code 11 : Puisque toutes les conditions ont échoué, le contrôle vérifiera maintenant la présence du bloc ELSE et imprimera le message « Pas de note » du bloc ELSE.
  • Ligne de code 14 : Impression de la déclaration « Programme terminé ».

Sortie de code :

Program started.
No Grade 
Program completed.

Instruction NESTED-IF

  • L'instruction NESTED-IF permet essentiellement aux programmeurs de placer une ou plusieurs conditions « IF » dans une autre condition « IF ». autres que les déclarations normales.
  • Chaque condition « IF » doit avoir une instruction « END IF » distincte qui marque la fin de la portée de cette condition particulière. .
  • La déclaration « IF » prendra en compte le nearest l'instruction 'END IF' comme point final pour cette condition particulière.
  • La représentation picturale de NESTED-IF est présentée ci-dessous dans le diagramme.

Instruction NESTED-IF

Instruction NESTED-IF

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

Explication de la syntaxe :

  • Dans la syntaxe ci-dessus, le IF externe contient une instruction IF supplémentaire dans son bloc d'action.
  • La condition1 renvoie , alors le contrôle s'exécutera et vérifie l'état1.
  • Si la condition2 renvoie également , alors sera également exécuté.
  • Dans le cas de la condition2, il est évalué à alors, SQL ignorera le .

Ici, nous allons voir un exemple de Nested If –

Exemple d'instruction If imbriquée : le plus grand des trois nombres

Dans cet exemple, nous allons imprimer le plus grand des trois nombres en utilisant l'instruction Nested-If. Les nombres seront attribués dans la partie déclarer, comme vous pouvez le voir dans le code ci-dessous, c'est-à-dire Number= 10,15 et 20 et le nombre maximum sera récupéré à l'aide d'instructions imbriquées-if.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
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 '10'.
  • Ligne de code 3 : Déclarer la variable 'b' comme type de données 'NUMBER' et l'initialiser avec la valeur '15'.
  • Ligne de code 4 : Déclarer la variable 'c' comme type de données 'NUMBER' et l'initialiser avec la valeur '20'.
  • Ligne de code 6 : Impression de la déclaration « Programme démarré » (ligne 6).
  • Ligne de code 7 : Vérification de la condition1, si « a » est supérieur à « b » (ligne 7).
  • Ligne de code 10 : si « a » est supérieur à « b), alors la condition dans « imbriqué-si 1 » vérifiera si « a » est supérieur à « c » (ligne 10).
  • Ligne de code 13 : Si toujours « a » est supérieur, alors le message « A est le plus grand » sera imprimé (ligne 11). Sinon, si la condition2 échoue, alors « C est le plus grand » sera imprimé (ligne 13).
  • Ligne de code 18 : dans le cas où la condition1 renvoie faux, alors la condition dans « nested-if 2 » vérifiera si « b » est supérieur à « c » (ligne 18).
  • Ligne de code 21 : si « b » est supérieur à « c », alors le message « B est le plus grand » sera imprimé (ligne 19), sinon si la condition 2 échoue, alors « C est le plus grand » sera imprimé (ligne 21).
  • Ligne de code 24 : Impression de la déclaration « Programme terminé » (ligne 24).

Sortie du code :

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Résumé

Dans ce chapitre, nous avons appris les différentes déclarations de prise de décision, leur syntaxe et leurs exemples. Le tableau ci-dessous donne le résumé des diverses instructions conditionnelles dont nous avons discuté.

TYPE DESCRIPTION UTILISATION
SI DONC Vérifie une condition booléenne, si le code VRAI dans le bloc 'THEN' sera exécuté. Pour ignorer/exécuter un code particulier en fonction de la condition.
SI-ALORS-SINON Vérifie une condition booléenne, si le code VRAI dans le bloc 'THEN' sera exécuté, si le code faux dans le bloc 'ELSE' est exécuté. Le plus approprié dans l’état « CECI OU CELA ».
SI-ALORS-ELSIF Vérifie une condition booléenne dans un ordre séquentiel. Le premier bloc de la séquence qui renvoie la condition VRAI sera exécuté. Si aucune des conditions de la séquence n'est VRAIE, alors le code du bloc 'ELSE' est exécuté. Utilisé pour choisir entre plus de deux alternatives pour la plupart.
Imbriqué-IF Autorise une ou plusieurs instructions IF-THEN ou IF-THEN-ELSIF dans une ou plusieurs autres instructions IF-THEN ou IF-THEN-ELSIF. Principalement utilisé dans des situations de conditions imbriquées.