Oracle Instruction 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 les types dโ€™รฉnoncรฉs de prise de dรฉcision suivants.

  • SI DONC
  • SI-ALORS-SINON
  • SI-ALORS-ELSIF
  • Imbriquรฉ-IF
  • BOรŽTIER
  • 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'.

ร€ noter: 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 le code suivant

Pour imprimer un message lorsqu'un nombre a une valeur supรฉrieure ร  100, nous exรฉcutons le code suivant.

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;
/

Code Explication:

  • Code ligne 2 : Dรฉclaration de la variable 'a' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '10'.
  • Code ligne 4 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code ligne 5 : Vรฉrification de la condition, si la variable 'a' est supรฉrieure ร  '100'.
  • Code Ligne 6 : Si ยซ a ยป est supรฉrieur ร  ยซ 100 ยป, alors ยซ a est supรฉrieur ร  100 ยป sera affichรฉ. Si ยซ a ยป est infรฉrieur ou รฉgal ร  100, la condition nโ€™est pas remplie et lโ€™instruction dโ€™affichage ci-dessus est ignorรฉe.
  • Code ligne 8 : Impression du message ยซ Programme terminรฉ ยป.

Code Sortie :

Program started.
Program completed.

Exemple 2: 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 le code suivant.

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;
/

Code Explication:

  • Code ligne 2: Dรฉclarer la variable 'a' comme 'CHAR' de type de donnรฉes de taille '1' et l'initialiser avec la valeur 'u'.
  • Code ligne 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.
  • Code ligne 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.

Code Sortie :

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รฉ.

ร€ noter: 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;
/

Code Explication:

  • Code ligne 2 : Dรฉclaration de la variable 'a' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '11'.
  • Code ligne 4 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code ligne 5 : Vรฉrification de la condition, si le modulo de la variable 'a' par '2' est 0.
  • Code ligne 6 : Si '0', alors ยซ a est un nombre pair ยป sera imprimรฉ.
  • Code Ligne 7 : Si la valeur du modulo nโ€™est pas รฉgale ร  ยซ 0 ยป, la condition est retournรฉe. Le message ยซ a est un nombre impair ยป sera donc imprimรฉ.
  • Code ligne 10 : Impression du message ยซ Programme terminรฉ ยป

Code Sortie :

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.

Note: 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 les deux cas suivants.
    • 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.

ร€ noter: Chaque fois que la condition est รฉvaluรฉe ร  ยซ NULL ยป, SQL traitera ยซ NULL ยป comme ยซ FALSE ยป.

Exemple 1: 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;
/

Code Explication:

  • Code ligne 2 : Dรฉclaration de la variable 'mark' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '55'.
  • Code ligne 4 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code ligne 5 : Vรฉrification de la condition 1, si 'mark' est supรฉrieur ou รฉgal ร  70.
  • Code ligne 7 : Puisque la condition 1 a รฉchouรฉ, la condition 2 '70>mark>=40' est vรฉrifiรฉe.
  • Code ligne 8 : La condition2 renvoie , par consรฉquent, le message ยซ Note B ยป sera imprimรฉ.
  • Code ligne 12 : Impression du message ยซ 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.

Code Sortie :

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;
/

Code Explication:

  • Code ligne 2 : Dรฉclaration de la variable 'mark' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '25'.
  • Code ligne 4 : Impression du message ยซ Programme dรฉmarrรฉ ยป.
  • Code ligne 5 : Vรฉrification de la condition 1, si 'mark' est supรฉrieur ou รฉgal ร  70.
  • Code ligne 7 : Puisque la condition 1 a รฉchouรฉ, la condition 2 '70>mark>=40' est vรฉrifiรฉe.
  • Code ligne 8 : Puisque la condition 2 a รฉchouรฉ, la condition 3 '40>mark>=35' est vรฉrifiรฉe.
  • Code ligne 11 : Puisque toutes les conditions ont รฉchouรฉ, le contrรดle va maintenant vรฉrifier la prรฉsence du bloc ELSE et afficher le message ยซ Aucune note ยป provenant du bloc ELSE.
  • Code ligne 14 : Impression du message ยซ Programme terminรฉ ยป.

Code Sortie :

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. .
  • L'instruction 'IF' considรฉrera l'instruction 'END IF' la plus proche 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;
/

Code Explication:

  • Code ligne 2 : Dรฉclaration de la variable 'a' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '10'.
  • Code ligne 3 : Dรฉclaration de la variable 'b' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '15'.
  • Code ligne 4 : Dรฉclaration de la variable 'c' comme type de donnรฉes 'NUMBER' et initialisation de celle-ci avec la valeur '20'.
  • Code ligne 6 : Impression du message ยซ Programme dรฉmarrรฉ ยป (ligne 6).
  • Code ligne 7 : Vรฉrification de la condition 1, si 'a' est supรฉrieur ร  'b' (ligne 7).
  • Code ligne 10 : Si 'a' est supรฉrieur ร  'b', alors la condition dans 'nested-if 1' vรฉrifiera si 'a' est supรฉrieur ร  'c' (ligne 10).
  • Code Ligne 13 : Si ยซ a ยป est toujours supรฉrieur, le message ยซ A est le plus grand ยป sera affichรฉ (ligne 11). Sinon, si la condition 2 รฉchoue, le message ยซ C est le plus grand ยป sera affichรฉ (ligne 13).
  • Code ligne 18 : Si la condition 1 renvoie faux, alors la condition dans 'imbriquรฉ 2' vรฉrifiera si 'b' est supรฉrieur ร  'c' (ligne 18).
  • Code ligne 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).
  • Code ligne 24 : Impression du message ยซ 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.

Rรฉsumez cet article avec :