DELIMITER |
CREATE PROCEDURE parcours_deux_clients()
BEGIN
DECLARE v_nom, v_prenom VARCHAR(100);
DECLARE curs_clients CURSOR
FOR SELECT nom, prenom
-- Le
SELECT récupère deux colonnes
FROM Client
ORDER BY nom, prenom;
-- On
trie les clients par ordre alphabétique
OPEN curs_clients;
-Ouverture du curseur
FETCH curs_clients INTO v_nom, v_prenom;
-- On
récupère la première ligne et on assigne les valeurs récupérées à
nos variables locales
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Premier client';
FETCH curs_clients INTO v_nom, v_prenom;
-- On
récupère la seconde ligne et on assigne les valeurs récupérées à
nos variables locales
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Second client';
CLOSE curs_clients;
-Fermeture du curseur
END|
DELIMITER ;
CALL parcours_deux_clients();
Premier client
Maximilien Antoine
Second client
Marie Boudur
Restrictions
FETCH est la seule commande permettant de récupérer une partie d'un jeu de résultats d'un curseur, et elle ne permet qu'une
chose : récupérer la ligne de résultats suivante.
Il n'est pas possible de sauter une ou plusieurs lignes, ni d'aller rechercher une ligne précédente. On ne peut que parcourir les
lignes une à une, de la première à la dernière.
Ensuite, il n'est pas possible de modifier une ligne directement à partir d'un curseur. Il s'agit d'une restriction particulière à
MySQL. D'autres SGBD vous permettent des requêtes d'UPDATE directement sur les curseurs.
Avec Oracle, la requête suivante modifiera la dernière ligne récupérée avec FETCH :
Code : SQL
UPDATE nom_table
SET colonne = valeur
WHERE CURRENT OF nom_curseur;
Ce n'est, du moins actuellement, absolument pas possible avec MySQL !!!
Partie 5 : Sécuriser et automatiser ses actions
302/414
www.openclassrooms.com
CREATE PROCEDURE parcours_deux_clients()
BEGIN
DECLARE v_nom, v_prenom VARCHAR(100);
DECLARE curs_clients CURSOR
FOR SELECT nom, prenom
-- Le
SELECT récupère deux colonnes
FROM Client
ORDER BY nom, prenom;
-- On
trie les clients par ordre alphabétique
OPEN curs_clients;
-Ouverture du curseur
FETCH curs_clients INTO v_nom, v_prenom;
-- On
récupère la première ligne et on assigne les valeurs récupérées à
nos variables locales
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Premier client';
FETCH curs_clients INTO v_nom, v_prenom;
-- On
récupère la seconde ligne et on assigne les valeurs récupérées à
nos variables locales
SELECT CONCAT(v_prenom, ' ', v_nom) AS 'Second client';
CLOSE curs_clients;
-Fermeture du curseur
END|
DELIMITER ;
CALL parcours_deux_clients();
Premier client
Maximilien Antoine
Second client
Marie Boudur
Restrictions
FETCH est la seule commande permettant de récupérer une partie d'un jeu de résultats d'un curseur, et elle ne permet qu'une
chose : récupérer la ligne de résultats suivante.
Il n'est pas possible de sauter une ou plusieurs lignes, ni d'aller rechercher une ligne précédente. On ne peut que parcourir les
lignes une à une, de la première à la dernière.
Ensuite, il n'est pas possible de modifier une ligne directement à partir d'un curseur. Il s'agit d'une restriction particulière à
MySQL. D'autres SGBD vous permettent des requêtes d'UPDATE directement sur les curseurs.
Avec Oracle, la requête suivante modifiera la dernière ligne récupérée avec FETCH :
Code : SQL
UPDATE nom_table
SET colonne = valeur
WHERE CURRENT OF nom_curseur;
Ce n'est, du moins actuellement, absolument pas possible avec MySQL !!!
Partie 5 : Sécuriser et automatiser ses actions
302/414
www.openclassrooms.com
