par
Tyeserel » 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 :
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.