Oracle BOUCLE PL/SQL avec exemple

Que sont les boucles ?

Les boucles permettent à une certaine partie du code d’un programme d’être exécutée le nombre de fois souhaité.

Dans ce tutoriel, nous allons voir le concept de boucle en PL/SQL et le flux de contrôle dans les boucles.

Introduction au concept de boucles

Le concept de boucles offre l’avantage suivant en matière de codage.

  • Réutilisabilité du code
  • Taille de code réduite
  • Flux de contrôle facile
  • Complexité réduite

Le diagramme ci-dessous montre le concept de boucle de manière picturale

Oracle BOUCLE PL/SQL

Dans le diagramme ci-dessus, la condition de boucle sera vérifiée et tant que la condition de boucle est satisfaite, le bloc d'exécution sera exécuté.

À chaque itération, la variable du compteur de boucle qui décide réellement de la condition de boucle doit être modifiée pour faire sortir le contrôle de la boucle. Dans certains cas, cette variable de compteur de boucle est un opérateur d'incrémentation/décrémentation pour un nombre prédéfini, et dans certains cas, il s'agit d'une condition de recherche qui continue d'exécuter le bloc jusqu'à ce qu'il le satisfasse.

Déclarations de contrôle de boucle

Avant d'apprendre le concept des boucles, il est obligatoire de se familiariser avec les instructions de contrôle de boucle. Les instructions de contrôle de boucle sont celles qui contrôlent réellement le flux d'exécution à l'intérieur de la boucle. Vous trouverez ci-dessous la description détaillée des instructions de contrôle de boucle.

VOIR PLUS

Ce mot-clé envoie une instruction au moteur PL/SQL selon laquelle chaque fois que le moteur PL/SQL rencontre ce mot-clé dans la boucle, il ignorera le code restant dans le bloc d'exécution du code et la prochaine itération démarrera immédiatement. Ceci sera principalement utilisé si le code à l'intérieur de la boucle veut être ignoré pour certaines valeurs d'itération.

SORTIR / SORTIR QUAND

Ce mot-clé envoie une instruction au moteur PL/SQL selon laquelle chaque fois que le moteur PL/SQL rencontre ce mot-clé, il sortira immédiatement de la boucle actuelle. Si le moteur PL/SQL rencontre EXIT dans une boucle imbriquée, alors il sortira de la boucle dans laquelle il a été défini, c'est à dire dans une boucle imbriquée, donner EXIT dans la boucle interne ne fera que sortir du contrôle de la boucle interne mais pas de la boucle externe. 'EXIT WHEN' est suivi d'une expression qui donne un résultat booléen. Si le résultat est VRAI, alors le contrôle SORTIE.

GOTO

Cette instruction transférera le contrôle à l'instruction étiquetée (« GOTO ; »). Cela a les restrictions suivantes

  • Le transfert de contrôle ne peut être effectué qu'au sein des sous-programmes.
  • Le transfert de contrôle ne peut pas être effectué de la partie gestion des exceptions vers la partie exécution

L'utilisation de cette instruction n'est pas recommandée à moins qu'il n'y ait pas d'autres alternatives, car la traçabilité du contrôle du code sera très difficile dans le programme en raison du transfert de contrôle d'une partie à une autre.

Types de boucles en PL/SQL

PL / SQL fournit les trois types de boucles suivants

Instruction de boucle de base

Cette instruction de boucle est la structure de boucle la plus simple en PL/SQL. Le bloc d'exécution commence par le mot-clé 'LOOP' et se termine par le mot-clé 'END LOOP'.

La condition de sortie doit être donnée à l'intérieur de ce bloc d'exécution afin que le contrôle sorte de la boucle.

Il faut que le mot-clé EXIT soit donné explicitement dans la partie exécution pour sortir de la boucle.

Instruction de boucle de base

 LOOP
<execution block starts>
<EXIT condition based on developer criteria> 
<execution_block_ends>
END LOOP;

Explication de la syntaxe :

  • Dans la syntaxe ci-dessus, le mot clé « LOOP » marque le début de la boucle et « END LOOP » marque la fin de la boucle.
  • Le bloc d'exécution contient tout le code qui doit être exécuté, y compris la condition EXIT.
  • La partie exécution peut contenir n'importe quelle instruction d'exécution.

Remarque : L'instruction de boucle de base sans mot-clé EXIT sera une INFINITE-LOOP qui ne s'arrêtera jamais.

Exemple 1: Dans cet exemple, nous allons imprimer le nombre de 1 à 5 en utilisant l'instruction de boucle de base. Pour cela, nous exécuterons le code suivant.

Instruction de boucle de base

DECLARE 
a NUMBER:=1; 
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:=a+1;
EXIT WHEN a>5;
END LOOP;
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 '1'.
  • Ligne de code 4: Impression de la déclaration « Programme démarré ».
  • Ligne de code 5 : Le mot clé « LOOP » marque le début de la boucle.
  • Ligne de code 6 : Imprime la valeur de « a ».
  • Ligne de code 7 : Incrémente la valeur de « a » de +1.
  • Ligne de code 8 : Vérifie si la valeur de « a » est supérieure à 5.
  • Ligne de code 9 : Le mot clé 'END LOOP' marque la fin du bloc d'exécution.
  • Le code de la ligne 6 à la ligne 8 continuera à s'exécuter jusqu'à ce que « a » atteigne la valeur 6, car la condition retournera VRAI et le contrôle SORTIRA de la boucle.
  • Ligne de code 10 : Impression du relevé « Programme terminé »

Étiquetage des boucles

En PL/SQL, les boucles peuvent être étiquetées. L'étiquette doit être placée entre « << » et « >> ». L'étiquetage des boucles, notamment dans les codes de boucles imbriquées, donnera plus de lisibilité. L'étiquette peut être donnée dans la commande EXIT pour quitter cette boucle particulière. En utilisant label, le contrôle peut être amené à quitter directement la boucle externe des boucles imbriquées depuis n'importe quel endroit à l'intérieur des boucles, en donnant la commande exit suivie de l'étiquette de la boucle externe.

Étiquetage des boucles

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

Explication de la syntaxe :

  • Dans la syntaxe ci-dessus, la boucle out contient une boucle supplémentaire.
  • Le '< >' et '< >' sont les étiquettes de ces boucles.

Exemple 1: Dans cet exemple, nous allons imprimer le nombre à partir de 1 en utilisant l'instruction de boucle Basic. Chaque numéro sera imprimé autant de fois que sa valeur. La limite supérieure de la série est fixée au niveau de la déclaration du programme. Voyons comment nous pouvons utiliser le concept de label pour y parvenir. Pour cela, nous exécuterons le code suivant

Étiquetage des bouclesÉtiquetage des boucles

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Explication du code :

  • Ligne de code 2-3: Déclaration des variables 'a' et 'b' comme type de données 'NUMBER'.
  • Ligne de code 4: Déclaration de la variable 'upper_limit' comme type de données 'NUMBER' avec la valeur '4'
  • Ligne de code 6: Impression de la déclaration « Programme démarré ».
  • Ligne de code 7 : La boucle externe a été étiquetée comme « outer_loop »
  • Ligne de code 9 : La valeur de « a » est incrémentée de 1.
  • Ligne de code 11 : La boucle interne a été étiquetée comme « inner_loop ».
  • Ligne de code 13 : Condition de SORTIE qui vérifie si la valeur « a » est supérieure à la valeur « upper_limit ». Sinon, il ira plus loin, sinon il quittera directement la boucle externe.
  • Ligne de code 14 : Impression de la valeur de 'b'.
  • Ligne de code 15 : Incrémente la valeur de « b » de +1.
  • Ligne de code 16 : Condition de SORTIE qui vérifie si la valeur de « b » est supérieure à « a ». Si tel est le cas, il quittera le contrôle de la boucle interne.
  • Ligne de code 14 : Impression du relevé « Programme terminé »

Résumé

boucle Boucle de base
Critère de sortie Quittez lorsque vous rencontrez le mot-clé « EXIT » dans la partie exécution
Utilisation Bon à utiliser lorsque la sortie n’est basée sur aucune condition particulière.