Bonjour à tou(te)s,
J'ai une requête qui retourne plusieurs lignes (ex : liste de nom, prénom et mail).
Je voudrais l'effectuer via une procédure (ou fonction) stockée.
Est-ce que MySQL permet cela ?
Merci.
Bonjour à tou(te)s,
J'ai une requête qui retourne plusieurs lignes (ex : liste de nom, prénom et mail).
Je voudrais l'effectuer via une procédure (ou fonction) stockée.
Est-ce que MySQL permet cela ?
Merci.
Oui tu peu le faire avec une procédure stocké
Fait un tour dans ce site t'aura une idée plus clair
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE PROCEDURE simpleproc () BEGIN SELECT nom, prenom, mail from matable END
http://dev.mysql.com/doc/refman/5.0/...re-syntax.html
@++![]()
Vous souhaitez participer aux rubriques .NET ? Contactez-moi
Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
Mon blog, Mes articles, Me suivre sur Twitter
En posant correctement votre problème, on trouve la moitié de la solution
Ce serait parfait si ce genre de code fonctionnait.
Exemple :
Mais MySQL renvoie une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DELIMITER ! CREATE PROCEDURE maBase.essai(inIdUtilisateur int(11), OUT outNomProjet varchar(30)) BEGIN SELECT nomProjet INTO outNomProjet FROM Projet WHERE idUtilisateur = inIdUtilisateur ; END !
Avec une variable de sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CALL essai2() *MySQL a répondu:*Documentation <http://dev.mysql.com/doc/refman/5.0/fr/error-messages-server.html> | #1312 - PROCEDURE testCLOEE.essai2 can't return a result set in the given context |
Mais, là aussi, MySQL renvoie une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DELIMITER ! CREATE PROCEDURE maBase.essai(inIdUtilisateur int(11), OUT outNomProjet varchar(30)) BEGIN SELECT nomProjet INTO outNomProjet FROM Projet WHERE idUtilisateur = inIdUtilisateur ; END !
Alors comment renvoyer une liste, un tableau... comme avec une requête simple ?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 *requête SQL:* CALL essai( 43, @a ) ; *MySQL a répondu:*Documentation <http://dev.mysql.com/doc/refman/5.0/fr/error-messages-server.html> | #1172 - Result consisted of more than one row |![]()
Essaie comme sa :
Code : Sélectionner tout - Visualiser dans une fenêtre à part CALL essai('@a') ;
salut.
tu as définis ta procedure pour prendre un parametre in et en renvoyer un.
seulement ces parametres il faut les passer.
pour tester et implenté une procedure je te conseille ce bon vieux mode console qui te permets d'avoir le retour complet de mysql.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 set @id='identifiant qui vient de ton application et que tu fais passer comme tu peux' ; call essai(@id,@ret); select @ret;
mais @ret ne peux pas etre une liste de plusieurs valeurs. tu peux toutefois renvoyer un varchar qui contiendrait la concaténation de tes valeurs séparer par n'importe quelle caracteres delimiteur non utilisé dans tes valeurs.(un peu bizare mais bon)
en regle général il ne faut pas utiliser les procedure stockés ou les fonctions mysql pour renvoyer une liste, ou encore un ensemble de champs.
Si c'est pour optimiser les performances je te conseille d'une de revoir la structure de ta table en analysant le résultat de explain ou du profilage (selon version) dans un premier temps. nomprojet et id doivent être au moins index.
Ensuite, si les performances sont toujours faible. Tu peux utiliser les requetes prépréparés ou prepared statement (j'arrive plus a trouver de doc) ou une view
http://dev.mysql.com/doc/refman/5.0/fr/create-view.html
Partager