Conception Et Réalisation (Oracle) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Traitement conditionnel

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;