Procédure stockée : plange sur END WHILE ?!
Posté : 27 mai 2010, 21:48
Bonjour,
Je dois effectuer une procédure stockée qui effectue le montant d'une facture annuel d'un client. Bref, la requête plante sur la forme et non sur le fond (enfin pour le moment <<).
L'erreur semble être sur le END WHILE, mais c'est tout de même très louche...
Message d'erreur : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE; CLOSE curseur; END IF; RETURN facture; END' at line 31
Procédure stockée :
J'ai cherché toute l'après-midi. Si quelqu'un peut m'éclairer à ce sujet.
Merci d'avance.
Je dois effectuer une procédure stockée qui effectue le montant d'une facture annuel d'un client. Bref, la requête plante sur la forme et non sur le fond (enfin pour le moment <<).
L'erreur semble être sur le END WHILE, mais c'est tout de même très louche...
Message d'erreur : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE; CLOSE curseur; END IF; RETURN facture; END' at line 31
Procédure stockée :
DELIMITER $$
CREATE FUNCTION mediatheque.facture_client(idc int) RETURNS double BEGIN
DECLARE facture double;
DECLARE tarif_album double;
DECLARE tarif_film double;
DECLARE tarif_livre double;
DECLARE var_famille char(1);
DECLARE boucle varchar(5) DEFAULT 'START';
DECLARE curseur cursor FOR
SELECT oeuvre.famille
FROM oeuvre, commande
WHERE oeuvre.id = commande.id_oeuvre
AND id_client = idc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET boucle = 'END';
SET facture := -1;
IF exists(SELECT id_client FROM client WHERE id_client = idc) THEN
SET facture := 0;
SELECT album, film, livre
INTO tarif_album, tarif_film, tarif_livre
FROM tarif;
OPEN curseur;
FETCH curseur INTO var_famille;
WHILE boucle <> 'END' DO
IF var_famille = 'A' THEN
SET facture := facture + tarif_album;
ELSE IF var_famille = 'F' THEN
SET facture := facture + tarif_film;
ELSE
SET facture := facture + tarif_livre;
END IF;
FETCH curseur INTO var_famille;
END WHILE;
CLOSE curseur;
END IF;
RETURN facture;
END;
Je ne vois pas ce que l'erreur 1064 a à voir avec mon problème. Sinon, j'ai testé sur MySQLQueryBrowser mais même problème (sachant que j'utilise phpMyAdmin).J'ai cherché toute l'après-midi. Si quelqu'un peut m'éclairer à ce sujet.
Merci d'avance.