Partie II
Programmation procédurale
246
© Éditions Eyrolles
Parcours d’un curseur
Vous pouvez choisir d’utiliser une structure répétitive tant que ou répéter. Le tableau suivant
présente le parcours d’un curseur à l’aide de ces deux techniques. Ici, il s’agit de faire la
somme des heures de vol des pilotes de la compagnie de code 'AF'.
Notez l’utilisation obligatoire d’une exception (handler dans le vocable de MySQL) qui force
le programme à continuer si on arrive en fin du curseur (au-delà du dernier enregistrement),
tout en positionnant la variable curs1 à vrai (1). Je dis « obligatoire », car MySQL ne
propose pas, pour l’heure, de fonctions sur les curseurs (FOUND, NOT_FOUND, IS_CLOSED,
etc.). Nous étudierons plus en détail les exceptions dans la prochaine section.
Personnellement, je préfère la programmation avec un tant que. L’appel de cette procédure
(avec l’une ou l’autre des techniques) sur la table de la figure 7-2 produira le résultat suivant :
+---------------------------------------+
| Total heures pour les pilotes de 'AF' |
+---------------------------------------+
|
3550.00 |
+---------------------------------------+
Tableau 7-6 Parcours d’un curseur
Tant que
Répéter
DECLARE fincurs1 BOOLEAN DEFAULT 0;
DECLARE v_nbHv
DECIMAL(7,2);
DECLARE v_tot
DECIMAL(8,2) DEFAULT 0;
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fincurs1 := 1;
REPEAT
IF NOT fincurs1 THEN
SET v_tot := v_tot+v_nbHv;
END IF;
UNTIL fincurs1
END REPEAT;
WHILE (NOT fincurs1) DO
SET v_tot := v_tot+v_nbHv;
END WHILE;
SELECT v_tot AS 'Total heures pour les pilotes de ''AF''';
Web
DECLARE curs1 CURSOR FOR
SELECT nbHVol FROM bdsoutou.Pilote WHERE comp = 'AF'
OPEN curs1;
FETCH curs1 INTO v_nbHv;
FETCH curs1 INTO v_nbHv;
FETCH curs1 INTO v_nbHv;
CLOSE curs1;
Programmation procédurale
246
© Éditions Eyrolles
Parcours d’un curseur
Vous pouvez choisir d’utiliser une structure répétitive tant que ou répéter. Le tableau suivant
présente le parcours d’un curseur à l’aide de ces deux techniques. Ici, il s’agit de faire la
somme des heures de vol des pilotes de la compagnie de code 'AF'.
Notez l’utilisation obligatoire d’une exception (handler dans le vocable de MySQL) qui force
le programme à continuer si on arrive en fin du curseur (au-delà du dernier enregistrement),
tout en positionnant la variable curs1 à vrai (1). Je dis « obligatoire », car MySQL ne
propose pas, pour l’heure, de fonctions sur les curseurs (FOUND, NOT_FOUND, IS_CLOSED,
etc.). Nous étudierons plus en détail les exceptions dans la prochaine section.
Personnellement, je préfère la programmation avec un tant que. L’appel de cette procédure
(avec l’une ou l’autre des techniques) sur la table de la figure 7-2 produira le résultat suivant :
+---------------------------------------+
| Total heures pour les pilotes de 'AF' |
+---------------------------------------+
|
3550.00 |
+---------------------------------------+
Tableau 7-6 Parcours d’un curseur
Tant que
Répéter
DECLARE fincurs1 BOOLEAN DEFAULT 0;
DECLARE v_nbHv
DECIMAL(7,2);
DECLARE v_tot
DECIMAL(8,2) DEFAULT 0;
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fincurs1 := 1;
REPEAT
IF NOT fincurs1 THEN
SET v_tot := v_tot+v_nbHv;
END IF;
UNTIL fincurs1
END REPEAT;
WHILE (NOT fincurs1) DO
SET v_tot := v_tot+v_nbHv;
END WHILE;
SELECT v_tot AS 'Total heures pour les pilotes de ''AF''';
Web
DECLARE curs1 CURSOR FOR
SELECT nbHVol FROM bdsoutou.Pilote WHERE comp = 'AF'
OPEN curs1;
FETCH curs1 INTO v_nbHv;
FETCH curs1 INTO v_nbHv;
FETCH curs1 INTO v_nbHv;
CLOSE curs1;
