
Les instructions sont exécutées si la condition est évaluée à TRUE. Si elle est évaluée à
FALSE ou NULL, elle est éventuellement traitée par le ELSE. L'instruction ELSIF permet
d'imbriquer plusieurs traitements conditionnels.
IF condition THEN
commandes PLSQL;
[ELSIF condition THEN
commandes PLSQL;]
[ELSIF condition THEN
commandes PLSQL;]
[ELSE
commandes PLSQL;]
END IF;
Exemple :
IF stock < 5 THEN
alertstock :='Alerte grave - commande immédiate';
ELSIF stock < 20 THEN
114
/* 5 <= stock < 20 */
alertstock :='Alerte moyenne - commande à prévoir';
ELSIF stock > 50 THEN
/* stock > 50 */
alertstock :='Stock à bon niveau';
ELSE
/***** 20 <= stock <= 50 */
alertstock :='Attention - stock en baisse';
END IF;
Remarques : Pour tester les valeurs NULL, IF adresse != NULL ne fonctionne pas. Il faut
écrire : IF adresse IS NULL ou IF adresse IS NOT NULL.
Traitements itératifs
On dispose de 3 instructions d'itération dans PL-SQL :
LOOP ... END LOOP
FOR ... LOOP ... END LOOP
WHILE ... LOOP ... END LOOP
LOOP
Il permet d'exécuter plusieurs fois un même ensemble d'instructions. On doit sortir de
l'itération à l'aide d'une instruction conditionnelle (EXIT WHEN condition) ou
inconditionnelle contenue dans un bloc IF ... END IF (EXIT ou GOTO).
LOOP
Exit WHEN condition;
ensemble d'instructions;
END LOOP;
FOR ... LOOP
Il permet d'exécuter un nombre précis d'itérations.
FOR compteur IN [REVERSE] borne-inf..borne-Sup
LOOP
ensemble d'instructions;
END LOOP;
Remarques :
- La variable compteur n'a pas besoin d'être préalablement déclarée, FOR crée implicitement
une variable locale.
- Avec l'option REVERSE, on va de borne-sup à borne-inf
- L'incrément est de 1 et de - 1 avec REVERSE.
- Les … font office de séparateur entre borne -inf et borne - sup.
- On peut aussi forcer la sortie avec un exit [when condition].
Exemple :
SET SERVEROUTPUT ON; -- autorise la sortie-écran.
BEGIN
FOR i IN 1..5
LOOP
dbms_output.put_line('ligne ' || i); -- sortie-écran
END LOOP;
END;
115
WHILE ... LOOP
Il permet d'exécuter une itération avec une condition d'entrée dans la boucle, condition
vérifiée à chaque boucle.
WHILE condition LOOP
ensemble d'instructions
END LOOP;
Exemple :
DECLARE x integer;
BEGIN x:= &donne; -- lire au clavier
WHILE abs(x) < 100
LOOP
x := x*x;
END LOOP;
dbms_output.put_line('x= ' || to_char(x));
END;