[procedure] une erreur de syntaxe, mais où ?
Bonjour,
Je démarre dans la création des procédures MySQL. Voici mon code et j'ai une erreur visiblement au niveau de l'affectation de c...
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| DELIMITER //
CREATE PROCEDURE Liste_Pays()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE c INT DEFAULT 1;
INSERT INTO c VALUES(SELECT COUNT(nom_pays) FROM pays);
WHILE i<=c DO
SELECT nom_pays, id_pays FROM pays;
SET i:=i+1;
END WHILE;
END//
DELIMITER ; |
Peut-onm'aider ? merci.
J'ai dit "c'est ça" mais...
Bonjour,
Je me suis un peu trop emporté.
La procédure a bien une syntaxe correcte mais son appel ne renvoie pas le résultat escompté, au contraire j'ai :
Code:
#1312 - PROCEDURE base_type.Liste_Pays can't return a result set in the given context
Je voulais la liste des pays... :bug:
je progresse vers la vérité...
C'est déjà mieux et ça me donne une indication sur ce qui me manque.
Visiblement, il ne me reste plus qu'à trouver comment lui dire de stocker les résultats nonpas dans une variable mais dans une colonne...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| DELIMITER //
CREATE PROCEDURE Liste_Pays()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE liste VARCHAR(50);
DECLARE c INT DEFAULT 1;
SELECT COUNT(nom_pays) INTO c FROM pays;
WHILE i<=c DO
SELECT nom_pays INTO liste FROM pays;
SET i:=i+1;
END WHILE;
END//
DELIMITER ; |
Je précise que ce code donne cette erreur :
Code:
#1172 - Result consisted of more than one row
à suivre...
RETURN uniquement pour FUNCTION
Désolé, mais RETURN n'est valide que pour les fonctions. Pas pour les Procédures.
Je voudrai afficher la liste des pays (leur nom) l'équivalent de :
Code:
SELECT nom_pays FROM pays ORDER BY nom_pays ASC;
La requête de base est simple et je peux la traiter en PHP, mais vu qu'elle ne nécessite aucun paramètre (type POST ou GET) je voudrai l'enlever de mes scripts et donc la stocker (avec d'autres du même genre) directement dans la base (je crée ainsi un niveau d'abstratction supllémentaire).
J'éspère avoir été plus clair sur mes intentions. Merci entout cas pour ton aide.