Procédure stockée : plange sur END WHILE ?!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Procédure stockée : plange sur END WHILE ?!

Re: Procédure stockée : plange sur END WHILE ?!

par Tyeserel » 31 mai 2010, 22:58

Je dois pas avoir posé la question sur le bon forum =p

Re: Procédure stockée : plange sur END WHILE ?!

par Tyeserel » 29 mai 2010, 00:08

Toujours pas trouvé de solution.

Alors, petit up !

Procédure stockée : plange sur END WHILE ?!

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.