IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

[procédure stockée] Requête renvoyant plusieurs lignes avec MySQL


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Par défaut [procédure stockée] Requête renvoyant plusieurs lignes avec MySQL
    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.

  2. #2
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Oui tu peu le faire avec une procédure stocké
    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
    Fait un tour dans ce site t'aura une idée plus clair
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Par défaut
    Ce serait parfait si ce genre de code fonctionnait.

    Exemple :
    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 !
    Mais MySQL renvoie une erreur :
    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 |
    Avec une variable de sortie :
    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 !
    Mais, là aussi, MySQL renvoie une erreur :
    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 |
    Alors comment renvoyer une liste, un tableau... comme avec une requête simple ?!

  4. #4
    Invité de passage
    Inscrit en
    Octobre 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 1
    Par défaut
    Essaie comme sa :


  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 390
    Par défaut
    salut.

    tu as définis ta procedure pour prendre un parametre in et en renvoyer un.
    seulement ces parametres il faut les passer.
    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;
    pour tester et implenté une procedure je te conseille ce bon vieux mode console qui te permets d'avoir le retour complet de mysql.


    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

Discussions similaires

  1. [XL-2010] Renvoyer plusieurs lignes avec une valeur de référence
    Par beabianchini dans le forum Excel
    Réponses: 1
    Dernier message: 20/02/2014, 11h49
  2. [procédure stockée] Requête renvoyant plusieurs lignes
    Par ourseblanche dans le forum MySQL
    Réponses: 4
    Dernier message: 21/07/2009, 10h50
  3. [MySQL] Mise à jours de plusieurs lignes avec mysql
    Par hakou08 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/04/2009, 20h10
  4. [Procédure Stockée] mettre à jour plusieurs lignes
    Par PoichOU dans le forum Langage SQL
    Réponses: 15
    Dernier message: 16/05/2007, 16h18
  5. Récupérer plusieurs lignes avec des procédures stockées
    Par GPZ{^_^} dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/03/2007, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo