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 :

Curseur qui ne fait qu'une seule itération


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut Curseur qui ne fait qu'une seule itération
    Bonjour,
    j'ai besoin de parcourir une table et pour chaque enregistrement dans cette table j'ai besoin de créer dix lignes dans une autre table.
    Pour l'instant j'ai fait ça :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    BEGIN
     
      declare vChild INTEGER;
     
      declare cpt INTEGER;
     
      declare done integer default 0;
     
      declare vCursor cursor for select id_child from t_child;
     
      declare continue handler for sqlstate '02000' set done = 1;
     
     
     
      open vCursor;
     
      repeat
     
        fetch vCursor into vChild;
     
        if not done then
     
    	set cpt = 1;
     
    	while (cpt < 10) DO
     
    	  insert into r_child_supporting_document(id_child, id_supporting_document, is_checked) values(vChild, cpt, 0);
     
    	  set cpt = cpt + 1;
     
    	end while;
     
        end if;
     
      until not done end repeat;
     
    end
    Mon problème est que mon code ne passe qu'une fois dans le curseur (je n'ai que les 10 enregistrements correspondant à la première ligne de mon curseur).

    Sachant que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select count(id_child) as nb_child from t_child;
    +----------+
    | nb_child |
    +----------+
    |     2203 | 
    +----------+
    Sauriez-vous d'où vient mon problème et comment le régler ?
    Merci d'avance

  2. #2
    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,

    done devrait plutôt être un bool pas un integer... les casts implicites ça peut donner des résultats bizarres...

    car là il va rien faire car done existe (not sur autre chose que du bool ça test possiblement la non initialisation, c'est à dire null ou pas et pas vraiment la valeur c'est à dire 0 ou 1)...

    je pense que ça vient de là

  3. #3
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    Bonjour,
    j'ai fait les modifications que tu m'as suggérées mais j'ai toujours le même problème

  4. #4
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Bonjour bonjour !

    Essaye peut être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    UNTIL done END REPEAT;
    à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    until NOT done end repeat;
    ça devrait mieux marcher

  5. #5
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    ok ça marche merci beaucoup !!

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    et vous avez bien vos 10 lignes de créées ? (pas 9 par hasard ?)

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

Discussions similaires

  1. [AJAX] [XMLHttp][IE]Fonction qui ne fonctionne qu'une seule fois
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2007, 11h16
  2. Réponses: 19
    Dernier message: 25/05/2007, 17h15
  3. Label qui ne change qu'une seule fois ...
    Par Christophe Charron dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/04/2006, 19h08
  4. fonction qui s'exécute qu'une seule fois sous Firefox
    Par la.sophe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/03/2006, 10h02
  5. fonction qui en fait planter une autre
    Par ickis dans le forum C
    Réponses: 5
    Dernier message: 18/08/2003, 21h33

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