CLOSE curs_clients;
END|
DELIMITER ;
CALL test_condition2('Houtsiplou');
CALL test_condition2('Bruxelles');
Je vous laisse le soin, si vous le désirez, de réécrire cette procédure en utilisant une boucle WHILE ou une boucle REPEAT.
C'est un excellent exercice !
Notez que ce n'est pas la seule solution pour arrêter la boucle. On pourrait par exemple compter le nombre de lignes récupérées,
grâce à la fonction FOUND_ROWS() (dont on a déjà parlé dans le chapitre sur les fonctions). Cependant, cette utilisation du
gestionnaire d'erreur est la solution la plus utilisée, et je la trouve personnellement très élégante.
Le cas des booléens chez MySQL
Un booléen, en informatique, est un type de donnée pouvant prendre deux états : vrai, ou faux.
MySQL ne propose pas ce type de données. Avec MySQL, on représente la valeur "vrai" par 1, et la valeur "faux" par 0.
Démonstration :
Code : SQL
SELECT 1 = 1, 1 = 2;
-- 1 = 1 est vrai, bien sûr. Contrairement à
1 = 2 (si si !)
1 = 1 1 = 2
1
0
Par conséquent, pour représenter un booléen, on utilise en général un TINYINT, valant soit 0, soit 1. C'est ce que l'on a fait pour
la colonne paye de la table Client par exemple.
Une autre conséquence, est que la structure IF que l'on utilise dans la procédure test_condition2() peut être réécrite de la
manière suivante :
Code : SQL
IF fin THEN
LEAVE loop_curseur;
END IF;
Et pour améliorer encore la lisibilité pour les données de ce genre, MySQL a créé plusieurs synonymes que l'on peut utiliser dans
ces situations.
BOOL et BOOLEAN sont synonymes de TINYINT(1).
TRUE est synonyme de 1.
FALSE est synonyme de 0.
On peut donc réécrire la procédure test_condition2() en utilisant ces synonymes.
Code : SQL
DROP PROCEDURE test_condition2;
DELIMITER |
CREATE PROCEDURE test_condition2(IN p_ville VARCHAR(100))
BEGIN
DECLARE v_nom, v_prenom VARCHAR(100);
Partie 5 : Sécuriser et automatiser ses actions
305/414
www.openclassrooms.com
Précédent

- 305/413

Suivant