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.
Version imprimable
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 clairCode:
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
@++;)
Ce serait parfait si ce genre de code fonctionnait. :cry:
Exemple :
Mais MySQL renvoie une erreur :Code:
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:
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:
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 ?! :cry:Code:
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: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:
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