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

Outils MySQL Discussion :

boucle sur 'SELECT *'


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut boucle sur 'SELECT *'
    Bonjour,

    je crée des fichiers .sql de maniere a créer des procedure stockées.

    Dans une de mes procedures stockée, je souhaiterai parcourir toute une table (table_filtre aves les colonnes test1 et test2) et ensuite faire un traitement pour chaque enregistrement...

    j'ai travaillai avec postgre et la requete etait du type:
    FOR _resultat IN (SELECT * FROM table_filtre) LOOP
    IF(_resultat.test1='toto') THEN
    [...traitement...]
    END IF;
    END LOOP;

    existe t-il sous MySQL un moyen de faire la meme chose en procedure stockée??
    j'ai vu qu'il existe des boucle WHILE, mais comment fait on pour recuperer les enregistrements un à un???

    j'espere avoir été assez clair...

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par castasql
    Dans une de mes procedures stockée, je souhaiterai parcourir toute une table (table_filtre aves les colonnes test1 et test2) et ensuite faire un traitement pour chaque enregistrement...
    c'est beaucoup plus lent que de le faire en bloc...
    Citation Envoyé par castasql
    existe t-il sous MySQL un moyen de faire la meme chose en procedure stockée??
    j'ai vu qu'il existe des boucle WHILE, mais comment fait on pour recuperer les enregistrements un à un???
    Avec un curseur http://dev.mysql.com/doc/refman/5.0/fr/cursors.html mais c'est MAL http://sqlpro.developpez.com/cours/s...r_avoidCursor/

    (c'est ma journée "SQLpro contre les curseurs" )

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut ?!?
    eviter les curseurs... est ce vraiment instable? est ce vraiment gourmand???

    car pour effectuer le traitement que j'ai a faire, la seule méthode alternative serait la methode 3 du lien que tu m'as donnée... avec une table temporaire....
    http://sqlpro.developpez.com/cours/s...r_avoidCursor/

    hors elle me semble tres lourde, et ressemble plus a une bidouille qu'a une vrai solution...

    en fait je voudrai savoir si ce curseurs cont vraiment instable? et qu'est ce que tu entend pas gourmand??

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par castasql
    car pour effectuer le traitement que j'ai a faire, la seule méthode alternative serait la methode 3 du lien que tu m'as donnée... avec une table temporaire....

    hors elle me semble tres lourde, et ressemble plus a une bidouille qu'a une vrai solution...
    c'est surtout une bidouille propre à SQL Server !
    Citation Envoyé par castasql
    en fait je voudrai savoir si ce curseurs cont vraiment instable? et qu'est ce que tu entend pas gourmand??
    Ce que Fred entend par "gourmand", c'est que les SGBD sont optimisés pour faire du traitement en masse (dit "ensembliste"). Avec un curseur, tu les forces à travailler ligne par ligne... c'est comme si tu avais une Ferrari et que tu ne roulais qu'en première.

    Je doute bcp que l'exemple 3 de Fred, qui est un script de pure administration de BDD, soit la seule solution. En quoi consiste ton "traitement" ? (si c'est vraiment de l'admin,
    je te dirais peut-être de faire un curseur )

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    je pense que je suis vraiment obligé d'utiliser un CURSEUR, mais je vais suivre ton conseil en évitant au maximum...

    j'aurai une autre question

    la taille est la complexité de mes procedure stockée grandit a vue d'oeil, même si j'essaie au maximum de les découper en petite procedures...
    Je voudrai donc savoir s'il existait un "pré-compilateur" ou "verificateur de syntaxe" un minimum puissant, permettant surtout d'isoler les problemes plus préceisement...
    car lorsque on ajoute un procedure stocké avec la commande:
    "/usr/local/mysql/bin/mysql < maprocedure.sql" le detail de l'erreur est assez limité et tres vague...

    j'accepte les outils pour windows comme pour linux

    merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par castasql
    je pense que je suis vraiment obligé d'utiliser un CURSEUR, mais je vais suivre ton conseil en évitant au maximum...
    ton traitement a l'air vachement secret
    Citation Envoyé par castasql

    Je voudrai donc savoir s'il existait un "pré-compilateur" ou "verificateur de syntaxe" un minimum puissant
    pas à ma connaissance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/04/2009, 10h39
  2. Réponses: 1
    Dernier message: 12/11/2008, 10h45
  3. Boucle sur Selection.Find.Execute
    Par Dapangma dans le forum VBA Word
    Réponses: 4
    Dernier message: 12/08/2008, 08h57
  4. [T-SQL] Boucle sur les resultats d'un SELECT sans CURSOR
    Par la drogue c'est mal dans le forum Sybase
    Réponses: 1
    Dernier message: 16/06/2008, 11h19
  5. faire une boucle sur un select
    Par reski dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/03/2006, 19h41

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