Oracle Instruction PL/SQL IF THEN ELSE : ELSIF, NESTED-IF
⚡ Résumé intelligent
Les instructions de décision PL/SQL contrôlent quel code s'exécute en fonction d'une condition booléenne. Oracle Il fournit les instructions IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF et NESTED-IF, permettant ainsi à un programme de sauter un bloc, de choisir entre deux chemins ou de sélectionner une alternative parmi plusieurs.
Que sont les déclarations décisionnelles ?
Les énoncés de décision déterminent le contrôle du flux de SQL Les instructions conditionnelles permettent au programmeur de mieux contrôler l'exécution d'un bloc particulier ou de sélectionner un bloc souhaité en fonction d'une condition. L'illustration ci-dessous représente une instruction de décision.

Types d'énoncés de prise de décision : Oracle propose les types suivants.
- SI DONC
- SI-ALORS-SINON
- SI-ALORS-ELSIF
- Imbriqué-IF
- BOÎTIER
- CAS RECHERCHÉ
Ce tutoriel traite des variantes de l'instruction IF. Les formes CASE et CASE recherchée sont abordées dans la section suivante. Instruction CASE PL/SQL guider.
Déclaration SI-ALORS
L'instruction IF-THEN permet d'exécuter une section de code spécifique uniquement lorsqu'une condition est remplie. Cette condition doit produire un résultat. Boolean Valeur (Vrai/Faux). Il s'agit d'une instruction conditionnelle de base qui permet Oracle Exécuter ou ignorer un morceau de code en fonction d'une condition prédéfinie.
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 » est suivi d’une condition qui s’évalue à « TRUE » ou « FALSE ».
- La commande exécute le seulement si la condition est remplie .
- Si la condition est évaluée à SQL ignore le et commence à exécuter le code après le bloc « END IF ».
À noter: Lorsqu'une condition est évaluée à 'NULL', SQL traite 'NULL' comme 'FALSE'.
Exemple 1: Dans cet exemple, nous affichons un message lorsque le nombre est supérieur à 100.
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 » s’affiche. Si « a » est inférieur ou égal à 100, la condition n’est pas remplie et l’affichage est ignoré.
- Code ligne 8 : Impression du message « Programme terminé ».
Code Sortie :
Program started. Program completed.
Exemple 2: Dans cet exemple, nous imprimons un message si une lettre donnée est une voyelle anglaise (A, E, I, O, U).
DECLARE a CHAR(1) := 'u'; BEGIN IF UPPER(a) in ('A','E','I','O','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 taille '1' et l'initialiser avec la valeur 'u'.
- Code ligne 4: Vérification de la présence de la variable « a » dans la liste (« A », « E », « I », « O », « U »). La valeur de « a » est convertie en majuscules avant la comparaison afin de la rendre insensible à la casse.
- Code ligne 5: Si la lettre « a » figure dans la liste, le message « Ce caractère fait partie des voyelles anglaises » s’affiche. Dans le cas contraire, le programme ne produit aucun résultat, car aucune instruction d’affichage n’est présente en dehors du bloc IF-THEN.
Code Sortie :
The character is in English Vowels
Instruction SI-ALORS-ELSE
L'instruction IF-THEN-ELSE permet de choisir entre deux alternatives en fonction d'une condition. Voici sa syntaxe.
Syntaxe des instructions IF-THEN-ELSE :
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSE -execute if the condition failed (returns FALSE) <action_block2> END IF;
- Le mot-clé « IF » est suivi d’une condition qui s’évalue à « TRUE » ou « FALSE ».
- Le contrôle s'exécute seulement si la condition est remplie .
- Si la condition est évaluée à , SQL exécute .
- Dans tous les cas, l'un des deux blocs d'actions est exécuté.
À noter: Lorsqu'une condition est évaluée à 'NULL', SQL traite 'NULL' comme 'FALSE'.
Exemple 1: Dans cet exemple, nous affichons 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 number'); 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 si le module de la variable 'a' par '2' est 0.
- Code ligne 6 : Si '0', alors « a est un nombre pair » est imprimé.
- Code ligne 7 : Si la valeur du modulo n’est pas égale à « 0 », la condition est retournée. , donc « a est un nombre impair » est 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 utilisée lorsqu'une alternative doit être choisie parmi un ensemble d'alternatives, chaque alternative ayant sa propre condition.
- La première condition qui renvoie est exécutée, et les autres conditions sont ignorées.
- L'instruction IF-THEN-ELSIF peut contenir un bloc 'ELSE', exécuté si aucune des conditions n'est satisfaite.
À noter: Le bloc ELSE est facultatif. S'il est absent et qu'aucune condition n'est remplie, le contrôleur ignore tous les blocs d'action et exécute le reste du code.
Syntaxe des instructions IF-THEN-ELSIF :
IF <condition1: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSIF <condition2: returns Boolean> THEN <action_block2> ELSIF <condition3: returns Boolean> THEN <action_block3> ELSE --optional <action_block_else> END IF;
- Le contrôle s'exécute seulement si la condition 1 est retournée .
- Si la condition 1 n'est pas satisfaite, le contrôleur vérifie la condition 2, et ainsi de suite.
- Le contrôleur sort de l'instruction IF lorsqu'il trouve une condition qui renvoie et exécute le bloc d'action correspondant, ou, si aucun n'est satisfait, le bloc ELSE (s'il est présent) s'exécute.
À noter: Lorsqu'une condition est évaluée à 'NULL', SQL traite 'NULL' comme 'FALSE'.
Exemple 1 : Sans bloc ELSE. Dans cet exemple, nous imprimons la note en fonction des notes données sans condition else (note >= 70 Note A, note >= 40 et note < 70 Note B, note >= 35 et note < 40 Note 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, pour savoir 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 : Condition2 renvoie Le message « Note B » s'affiche donc.
- Code Ligne 12 : Affichage du message « Programme terminé ». La condition 3 « mark < 35 » est ignorée, car une condition VRAIE a déjà été trouvée.
Code Sortie :
Program started. Grade B Program completed.
Exemple 2 : Avec un bloc ELSE. Dans cet exemple, nous imprimons la note en fonction des notes données avec une condition else (note >= 70 Note A, note >= 40 et note < 70 Note B, note >= 35 et note < 40 Note C, sinon 'Aucune 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, pour savoir 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 9 : Puisque la condition 2 a échoué, la condition 3 '40 > mark >= 35' est vérifiée.
- Code ligne 11 : Comme toutes les conditions ont échoué, le contrôle vérifie le bloc ELSE et affiche « Aucune note ».
- Code ligne 14 : Impression du message « Programme terminé ».
Code Sortie :
Program started. No Grade Program completed.
Instruction NESTED-IF
- L'instruction NESTED-IF permet aux programmeurs de placer une ou plusieurs conditions 'IF' à l'intérieur d'une autre condition 'IF'. .
- Chaque condition « SI » doit être suivie d'une instruction « FIN SI » distincte, qui marque la fin de la portée de cette condition. .
- L'instruction 'IF' considère le 'END IF' le plus proche comme point final de cette condition.
- La représentation graphique de NESTED-IF est illustrée ci-dessous.
IF <condition1: 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_block1 ends> END IF; --END IF corresponds to condition1
Explication de la syntaxe :
- Le bloc IF externe contient une autre instruction IF dans son bloc d'action.
- Si la condition1 est remplie , le contrôle s'exécute et vérifie la condition 2.
- Si la condition2 renvoie également , alors est également exécuté.
- Si la condition2 est évaluée à , SQL ignore .
Exemple d'instruction SI imbriquée : Le plus grand de trois nombres. Dans cet exemple, nous affichons le plus grand de trois nombres à l'aide d'une instruction if imbriquée. Les nombres sont initialisés dans la partie declare (Number = 10, 15 et 20), et le maximum est récupéré grâce à des instructions if imbriquées.
DECLARE a NUMBER := 10; b NUMBER := 15; c NUMBER := 20; BEGIN dbms_output.put_line('Program started.'); IF( a > b)THEN /*Nested-if 1 */ 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 lignes 2-4 : Déclaration des variables 'a', 'b' et 'c' comme 'NUMBER' et initialisation de celles-ci avec 10, 15 et 20.
- Code ligne 6 : Impression du message « Programme démarré ».
- Code ligne 7 : Vérification de la condition 1, si 'a' est supérieur à 'b'.
- Code ligne 10 : Si 'a' est supérieur à 'b', le if imbriqué 1 vérifie si 'a' est supérieur à 'c'.
- Code lignes 11-13 : Si 'a' est toujours supérieur, 'A est le plus grand' est imprimé ; sinon 'C est le plus grand' est imprimé.
- Code ligne 18 : Si la condition 1 renvoie faux, la condition imbriquée 2 vérifie si 'b' est supérieur à 'c'.
- Code lignes 19-21 : Si 'b' est supérieur à 'c', 'B est le plus grand' est imprimé ; sinon 'C est le plus grand' est imprimé.
- Code ligne 24 : Impression du message « Programme terminé ».
Sortie du code :
Program started. Checking Nested-IF 2 C is greatest Program completed.
Comparaison des énoncés de prise de décision
Le tableau ci-dessous récapitule les différentes instructions conditionnelles abordées, afin que celle qui convient le mieux à une situation donnée.
| Type | Description | Utilisation |
|---|---|---|
| SI DONC | Vérifie une condition booléenne ; si la valeur est VRAIE, le code du bloc « ALORS » est exécuté. | Pour ignorer ou exécuter un bloc particulier en fonction de la condition. |
| SI-ALORS-SINON | Vérifie une condition booléenne ; si VRAI, le bloc « ALORS » s'exécute, si FAUX, le bloc « SINON » s'exécute. | Idéalement adapté à une situation de type « ceci ou cela ». |
| SI-ALORS-ELSIF | Vérifie les conditions séquentiellement. Le premier bloc qui renvoie VRAI est exécuté. Si aucun n'est VRAI, le bloc « ELSE » est exécuté. | Permettait de choisir parmi plus de deux alternatives. |
| Imbriqué-IF | Permet d'imbriquer une ou plusieurs instructions IF-THEN ou IF-THEN-ELSIF. | Principalement utilisé dans une situation de condition imbriquée. |



