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 :

boucle imbriquée dans une procédure st?


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut boucle imbriquée dans une procédure st?
    Bonjour à tous,

    je crois que décidément je ne suis pas fait pour les procédures stockées... je n'arrive pas à assimiler le raisonnement.

    Je dois faire une procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    DELIMITER |
    
    CREATE PROCEDURE maProc()
    BEGIN
            DECLARE done INT DEFAULT 0;
            DECLARE var1 VARCHAR(32);
            DECLARE var2 VARCHAR(32);
    
            DECLARE curseur1 CURSOR FOR SELECT s1,s2,s3 from maTable where s2 > 0;
            DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
      
            OPEN curseur1;
      
            REPEAT
                    FETCH curseur1 INTO ss1,ss2,ss3;
                    IF done = 0 THEN
                    ???????
                    END IF;
            UNTIL done
            END REPEAT;
      
            CLOSE curseur1;
    END|
    DELIMITER ;

    Je souhaite utiliser par exemple ss1 pour refaire une requête, parcourir à nouveau ces nouveaux résultats pour faire des traitement.

    Mais je prend des erreurs de syntaxe. Apparemment on ne peut donc pas utiliser deux curseurs ?

    mes tables sont schématiquement comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maTable (id,s2 (int) )
    maTable2 (id,#parent (int),d2 (int))
    (ps: le champs #parent n'est pas une foreign key, c'est seulement un champs simulant un foreign key)
    Grosso-modo je dois requêter maTable1 pour obtenir admettons 3 lignes. Ensuite avec les id de ces 3 lignes, je dois allez chercher dans maTable2 les entrées qui ont pour parent l'id de la première table.
    Puis pour chaque fils trouvé donc, je dois incrémenter la variable d2.




    Je sais pas si c'est clair, mais je reste disponible pour toute précision ou reformulation.

    Merci d'avoir pris la peine de lire jusque là.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Pourquoi ne pas faire une seule requête ?

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE curseur1 CURSOR FOR SELECT s1,s2,s3,.. FROM maTable INNER JOIN maTable2 ON maTable.id=maTable2.parent WHERE maTable.s2 > 0;

  3. #3
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Bonjour,

    mes traitements finaux sont un peu plus complexes que ce que j'expose, c'est à dire que je dois pour chaque fils comparer avec plusieurs valeurs du père, grouper certaines valeurs de tous les fils etc...

    C'est pour ça que je trouve plus naturel d'imbriquer deux boucles.

    Sinon, avec l'inner join, il faut que je fasse un while qui parcourrai mes résultats j'imagine non?

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    si tu veux une chance d'avoir de l'aide mets clairement ce que tu veux faire... surtout pour des traitement complexes et donc pénibles...

    imagine comme c'est pénible de réfléchir bénévolement sur un problème et que le mec change 20 fois de version en cours de route...

  5. #5
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Bonjour,

    j'essai justement de penser systématiquement au bénévole qui lis mon problème et essai de le simplifier au maximum et seulement mettre en exergue conceptuellement les endroits précis ou je bloque.

    Après effectivement je peux parfois passer à coté de détails primordiaux, mais je ne change pas de version en cours de route.

    Mon problème est le suivant depuis le début:

    Je souhaite imbriquer deux boucles A et B, ou B utilisera pour sa requête des résultats obtenu par le A.

    Et pouvoir faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boucle A=(select a_var1,a_var2 from matable){
       boucle B = (select b_var1,b_var2 from maTable2){
             if (a_var1 > b_var1) {
                a_var2 = 0
                b_var2 = 1
              }
       }
    }

    Donc avoir accès aux variables concernées par l'état de mes boucles.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Tu as un article qui semble intéressant ici :
    http://rpbouman.blogspot.fr/2005/10/...sor-loops.html

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

Discussions similaires

  1. optimiser une boucle while imbriquer dans une boucle for
    Par bakaratoun dans le forum MATLAB
    Réponses: 0
    Dernier message: 28/01/2010, 15h35
  2. Réponses: 1
    Dernier message: 12/11/2008, 10h45
  3. Réponses: 11
    Dernier message: 04/08/2008, 18h04
  4. Effectuer une boucle (foreach) dans une procédure stockée ?!
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2007, 16h02
  5. [DEBUTANT]faire une boucle dans une procédure stockée
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/06/2007, 13h49

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