DECLARE fin BOOLEAN DEFAULT FALSE;
-- On
déclare fin comme un BOOLEAN, avec FALSE pour défaut
DECLARE curs_clients CURSOR
FOR SELECT nom, prenom
FROM Client
WHERE ville = p_ville;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = TRUE; -- On
utilise TRUE au lieu de 1
OPEN curs_clients;
loop_curseur: LOOP
FETCH curs_clients INTO v_nom, v_prenom;
IF fin THEN
-- Plus
besoin de "= 1"
LEAVE loop_curseur;
END IF;
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Client';
END LOOP;
CLOSE curs_clients;
END|
DELIMITER ;
Utilisation avancée des blocs d'instructions
Vous avez maintenant vu les principales structures qu'il est possible d'utiliser dans un bloc d'instructions. Nous allons ici
combiner ces structures avec des objets ou notions vues précédemment.
La puissance du langage SQL (et de tous les langages informatiques) réside dans le fait qu'on peut combiner différentes notions
pour réaliser des traitements complexes. Voici quelques exemples de telles combinaisons.
Notez que ces exemples utilisent tous des procédures stockées, mais la plupart sont adaptables à d'autres objets, comme les
triggers, les fonctions stockées ou les événements.
Utiliser des variables utilisateur dans un bloc d'instructions
En plus des variables locales, il est tout à fait possible d'utiliser des variables utilisateur dans un bloc d'instructions. Mais
n'oubliez pas qu'une variable utilisateur est définie pour toute la session, pas uniquement le bloc, même si elle est créée à
l'intérieur de celui-ci.
Exemple : procédure stockée utilisant une variable utilisateur.
Code : SQL
DELIMITER |
CREATE PROCEDURE test_vu()
BEGIN
SET @var = 15;
END|
DELIMITER ;
SELECT @var;
-- @var n'existe pas encore, on ne l'a pas définie
CALL test_vu(); -- On exécute la procédure
SELECT @var;
-- @var vaut maintenant 15, même en dehors de la
procédure, puisqu'elle est définie partout dans la session
Voyant cela, on pourrait être tenté d'utiliser des variables utilisateur à la place des paramètres OUT et INOUT des procédures
stockées.
Cependant, il convient d'être extrêmement prudent lorsque l'on utilise des variables utilisateur dans un bloc d'instructions.
Si l'on reste par exemple dans le contexte des procédures stockées, un des intérêts de celles-ci est d'avoir une interface entre la
Partie 5 : Sécuriser et automatiser ses actions
306/414
www.openclassrooms.com
-- On
déclare fin comme un BOOLEAN, avec FALSE pour défaut
DECLARE curs_clients CURSOR
FOR SELECT nom, prenom
FROM Client
WHERE ville = p_ville;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = TRUE; -- On
utilise TRUE au lieu de 1
OPEN curs_clients;
loop_curseur: LOOP
FETCH curs_clients INTO v_nom, v_prenom;
IF fin THEN
-- Plus
besoin de "= 1"
LEAVE loop_curseur;
END IF;
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Client';
END LOOP;
CLOSE curs_clients;
END|
DELIMITER ;
Utilisation avancée des blocs d'instructions
Vous avez maintenant vu les principales structures qu'il est possible d'utiliser dans un bloc d'instructions. Nous allons ici
combiner ces structures avec des objets ou notions vues précédemment.
La puissance du langage SQL (et de tous les langages informatiques) réside dans le fait qu'on peut combiner différentes notions
pour réaliser des traitements complexes. Voici quelques exemples de telles combinaisons.
Notez que ces exemples utilisent tous des procédures stockées, mais la plupart sont adaptables à d'autres objets, comme les
triggers, les fonctions stockées ou les événements.
Utiliser des variables utilisateur dans un bloc d'instructions
En plus des variables locales, il est tout à fait possible d'utiliser des variables utilisateur dans un bloc d'instructions. Mais
n'oubliez pas qu'une variable utilisateur est définie pour toute la session, pas uniquement le bloc, même si elle est créée à
l'intérieur de celui-ci.
Exemple : procédure stockée utilisant une variable utilisateur.
Code : SQL
DELIMITER |
CREATE PROCEDURE test_vu()
BEGIN
SET @var = 15;
END|
DELIMITER ;
SELECT @var;
-- @var n'existe pas encore, on ne l'a pas définie
CALL test_vu(); -- On exécute la procédure
SELECT @var;
-- @var vaut maintenant 15, même en dehors de la
procédure, puisqu'elle est définie partout dans la session
Voyant cela, on pourrait être tenté d'utiliser des variables utilisateur à la place des paramètres OUT et INOUT des procédures
stockées.
Cependant, il convient d'être extrêmement prudent lorsque l'on utilise des variables utilisateur dans un bloc d'instructions.
Si l'on reste par exemple dans le contexte des procédures stockées, un des intérêts de celles-ci est d'avoir une interface entre la
Partie 5 : Sécuriser et automatiser ses actions
306/414
www.openclassrooms.com
