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

Table des matières:

Anonim

Que sont les déclarations décisionnelles?

Les instructions de prise de décision sont celles qui décideront du contrôle de flux des instructions SQL en fonction des conditions. Cela donne au programmeur un meilleur contrôle pour empêcher l'exécution d'un code particulier (diagramme 1) ou pour choisir un code souhaité en fonction de la condition (diagramme 2). Ci-dessous, la représentation illustrée de la «Déclaration de prise de décision».

Diagramme d'énoncé de prise de décision

Types d'énoncés décisionnels:

Oracle fournit les types d'énoncés de prise de décision suivants.

  • SI DONC
  • SI-PUIS-AUTRE
  • SI-PUIS-ELSIF
  • NESTED-IF
  • CAS
  • CAS RECHERCHE

Dans ce didacticiel, vous apprendrez-

  • Introduction aux déclarations de prise de décision
  • Déclaration IF-THEN
  • Déclaration IF-THEN-ELSE
  • Déclaration IF-THEN-ELSIF
  • Instruction NESTED-IF

Déclaration IF-THEN

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 doit produire Boolean (True / False). Il s'agit d'une instruction conditionnelle de base qui permettra à l'ORACLE d'exécuter / d'ignorer un morceau de code particulier en fonction des conditions prédéfinies.

Syntaxe des instructions IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Dans la syntaxe ci-dessus, le mot-clé «IF» sera suivi d'une condition qui prend la valeur «TRUE» / «FALSE».
  • Le contrôle exécutera le uniquement si la condition renvoie .
  • Dans le cas où la condition est évaluée à , SQL ignorera le et 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 allons exécuter le code suivant

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

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_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 l'instruction "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, 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. 

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 Voyelle, nous exécutons le code suivant.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_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érification de 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 pour que la comparaison ne soit pas sensible à la casse.
  • Ligne de code 5: Si 'a' est présent dans la liste, alors l'instruction "Le caractère est dans les 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

Déclaration IF-THEN-ELSE

  • L'instruction IF-THEN-ELSE est principalement utilisée pour sélectionner entre deux alternatives basées sur la condition.
  • Vous trouverez ci-dessous la représentation syntaxique de l'instruction IF-THEN-ELSE.

Syntaxe des instructions IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Dans la syntaxe ci-dessus, le mot-clé «IF» sera suivi d'une condition qui prend la valeur «TRUE» / «FALSE».
  • Le contrôle exécutera le uniquement si la condition renvoie .
  • Si la condition est évaluée à , 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, que le nombre donné soit pair ou impair.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_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 l'instruction "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 du relevé "Programme terminé"

Sortie de code:

Program started.a is odd numberProgram completed. 

Déclaration 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 renvoient seront exécutées 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.

Remarque : le bloc ELSE est facultatif dans cette instruction conditionnelle. S'il n'y a pas de bloc ELSE et qu'aucune condition n'est satisfaite, alors le contrôleur sautera tout le bloc d'action et commencera à exécuter la partie restante du code.

Syntaxe des instructions IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Dans la syntaxe ci-dessus, le contrôle exécutera le uniquement si la condition1 renvoie .
  • Si la condition1 n'est pas satisfaite, le contrôleur vérifiera la condition2.
  • Le contrôleur sortira de l'instruction IF dans les deux cas suivants.
    • Lorsque le contrôleur a trouvé une condition qui renvoie . Dans ce cas, le bloc_action correspondant sera exécuté et le contrôleur quittera ce bloc d'instructions IF et commencera à exécuter le code restant.
    • Lorsqu'aucune des conditions n'est satisfaite, le contrôleur then exécutera le bloc ELSE s'il est présent, puis sortira de l'instruction IF.

Remarque: 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 note A, note> = 40 et note <70 note B, note> = 35 et note <40 classe C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_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 l'instruction "Programme démarré".
  • Ligne de code 5: Vérification de la condition1, si 'mark' est supérieur ou égal à 70.
  • Ligne de code 7: Puisque la condition1 a échoué, la condition2 '70> marque> = 40 'est vérifiée.
  • Ligne de code 8: La condition2 renvoie , d'où le message 'Grade B' sera imprimé.
  • Code line12: Impression de l'instruction "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 BProgram completed.

Exemple 2 : avec 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').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_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 'marque' comme type de données 'NUMBER' et l'initialiser avec la valeur '25'.
  • Ligne de code 4: impression de l'instruction "Programme démarré".
  • Ligne de code 5: vérification de la condition 1, si 'mark' est supérieur ou égal à 70.
  • Ligne de code 7: Puisque la condition1 a échoué, la condition2 '70> marque> = 40 'est vérifiée.
  • Ligne de code 8: Puisque la condition2 a échoué, la condition3 '40> marque> = 35 'est vérifiée.
  • Ligne de code 11: Puisque toutes les conditions ont échoué, le contrôle va maintenant vérifier la présence du bloc ELSE, et il imprimera le message 'No Grade' du bloc ELSE.
  • Code line14: Impression de l'instruction "Programme terminé".

Sortie de code:

Program started.No GradeProgram completed.

Instruction NESTED-IF

  • L'instruction NESTED-IF est essentiellement autorisée aux programmeurs de placer une ou plusieurs conditions 'IF' à l'intérieur d'un autre de condition 'IF' autre que les instructions normales.
  • Chaque condition 'IF' doit avoir une instruction 'END IF' distincte qui marque la fin de la portée de ce particulier.
  • L'instruction 'IF' considérera l'instruction 'END IF' la plus proche comme un point final pour cette condition particulière.
  • La représentation illustrée de NESTED-IF est illustrée ci-dessous.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END 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 , puis le contrôle exécutera et vérifie la condition2.
  • Si la condition2 renvoie également , alors sera également exécuté.
  • Si la condition2 est évaluée à , SQL ignorera le .

Ici, nous allons voir un exemple de Si imbriqué -

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

Dans cet exemple, nous allons imprimer le plus grand des trois nombres à l'aide de l'instruction Nested-If. Les numéros seront attribués dans la partie de déclaration, 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.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_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 l'instruction "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 «a» est toujours plus grand, 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 fausse, la condition dans 'imbriqué-si 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 condition2 é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 de code:

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

Résumé

Dans ce chapitre, nous avons appris les différents énoncés 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é.

TAPER

LA DESCRIPTION

USAGE

SI DONC

Vérifie une condition booléenne, si le code TRUE dans le bloc 'THEN' sera exécuté.

Pour sauter, / exécuter un code particulier basé sur la condition.

SI-PUIS-AUTRE

Vérifie une condition booléenne, si le code TRUE 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-PUIS-ELSIF

Recherche une condition booléenne dans un ordre séquentiel. Le premier bloc de la séquence qui renvoie la condition TRUE 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 parmi plus de deux alternatives principalement.

NESTED-IF

Autorise une ou plusieurs instructions IF-THEN ou IF-THEN-ELSIF dans une ou plusieurs instructions IF-THEN ou IF-THEN-ELSIF.

Principalement utilisé dans une situation de condition imbriquée.