Cours SQL ORACLE – 07-03 : Tests et boucles
Comme n’importe quel autre langage de programmation, il existe dans PL/SQL la notion de test (IF ELSE) et de boucle (FOR WHILE):
- IF ELSE:
La syntaxe du IF dans PL/SQL est la suivante :
IF <condition> THEN
<Traitement si condition vérifiée>;
ELSE
<Traitement si condition n'est pas vérifiée>;
END IF;
La <condition> doit être sous forme d’opérateur logique qui retourne True ou False. On peut avoir un test de type = , < , > , <= , >= , IS NULL, IS NOT NULL, IN, LIKE, BETWEEN… IS NULL, IS NOT NULL permettent de tester si une valeur est vide ou pas. Le test des variables vides ne peut pas se faire par l’opérateur =.
La condition de test peut être aussi une fonction qui retourne un booléen. On peut avoir plusieurs condition dans un test, on utilise dans ce cas les opérateurs AND et OR.
Dans le test, la partie ELSE est facultative, dans ce cas, cela veut dire qu’on peut réaliser un traitement si la condition est valide, ne rien faire dans le cas contraire.
On peut faire des IF imbriqués, Exemple:
IF X > 0 THEN
Y := 'POSITIF';
ELSE
IF X < 0 THEN
Y := 'NEGATIF';
ELSE
Y := 'NUL';
END IF;
END IF;
Si X est supérieur à 0 alors Y est positif
Sinon
Si X est inférieur à 0 alors Y est négatif
Sinon, Y est nul.
On peut récrire le bout de code précédent en utilisant ELSIF
IF X > 0 THEN
Y := 'POSITIF';
ELSIF X < 0 THEN
Y := 'NEGATIF';
ELSE
Y := 'NUL';
END IF;
Les itérations ou les boucles permettent d’exécuter une commande autant de fois voulu ou jusqu’à satisfaire une condition. Les boucles en PL/SQL sont:
- LOOP … ; EXIT [WHEN …]; END LOOP;
Répéter l’action jusque la condition soit réalisée. Exemple:
X := 0;
I := 1;
LOOP
X := I;
I := I + 1;
EXIT WHEN I > 5;
END LOOP;
Dans cet exemple on initialise I par 1. A la première itération, X est égal à 1 et I est égal à 2. On teste si I est supérieur à 5, Si oui on sort de la boucle, Sinon on continue. Et ainsi de suite jusqu’à avoir I supérieur à 5 (I = 6). Le résultat de X sera 5.
Une spécification très importante de cette boucle, c’est que le traitement s’exécute au moins une fois :
X := 0;
I := 1;
LOOP
X := I;
I := I + 1;
EXIT WHEN I > 0;
END LOOP;
Dans ce cas X sera égal à 1 et I à 2.
- WHILE … LOOP; END LOOP;
Si la condition est réalisée alors répéter l’action. Exemple:
X := 0;
I := 1;
WHILE I <= 5
LOOP
X := I;
I := I + 1;
END LOOP;
Dans cet exemple on teste d’abord si I est inférieur ou égal à 5, si c’est le cas alors X est égal à 1 et I est égal à 2. Et ainsi de suite jusqu’à avoir I supérieur à 5 (I = 6). Le résultat de X sera 5.
Contrairement à la boucle LOOP, l’itération WHILE ne s’exécute que si la condition est vrai :
X := 0;
I := 1;
WHILE I >= 5
LOOP
X := I;
I := I + 1;
END LOOP;
Dans ce cas X sera égal à 0 et I à 1.
- FOR … IN .. LOOP END LOOP;
Pour un entier compris entre X et Y, exécuter la commande. Exemple:
X := 0;
FOR I IN 1 .. 5
LOOP
X := I;
END LOOP;
Dans cet exemple, I commence par 1 et s’incrémente à chaque itération de 1 jusqu’à arriver à 5 puis on sort de la boucle. Le résultat de X sera 5.