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 :

Une routine qui donne un doublon pour la dernière ligne


Sujet :

SQL Procédural MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut Une routine qui donne un doublon pour la dernière ligne
    Bonjour,
    j'ai une routine qui (après tout un tas de calcul) ajoute des ligne à une table. Le problème c'est que cette fameuse routine ajoute deux fois la dernière ligne traitée. Je vous met les code mais je vous épargne le traitement au milieu :

    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
    38
    39
    40
    41
    42
    43
     
    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
     
    CREATE DEFINER=`root`@`%` PROCEDURE `disponibilité`()
    BEGIN
     
        DECLARE done INT DEFAULT 0;
        DECLARE idSoft INT;
        DECLARE nomSoft VARCHAR(255);
        DECLARE nb_tickets INT;
        DECLARE nb_interruption INT;
        DECLARE interruption_en_min INT;
        DECLARE nb_degradation INT;
        DECLARE dégradation_en_min INT;
        DECLARE tickets_sans_alteration INT;
        DECLARE taux_dispo float(6,3);
        DECLARE mois_en_cours VARCHAR(255);
     
    DECLARE c CURSOR FOR 
     
    /*******************
    BLABLABLA tout le traitement qui initie les valeurs plus haut
    *********************/
     
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
     
        OPEN c;
        REPEAT
         IF done = 0 THEN
            fetch c into idSoft,nomSoft,nb_tickets,nb_interruption,interruption_en_min,nb_degradation,dégradation_en_min,tickets_sans_alteration,taux_dispo,mois_en_cours;
     
                INSERT INTO `gautier`.`disponibilite_applications`(`id_software`,`mois`,`name`,`nb_total_ticket`,`nb_tickets_interruption`,`total_interruption_en_min`,`nb_tickets_degradation`,`total_dégradation_en_min`,`nb_tickets_sans_alteration_des_performances`,`taux_disponibilite`) 
                VALUES(idSoft,mois_en_cours,nomSoft,nb_tickets,nb_interruption,interruption_en_min,nb_degradation,dégradation_en_min,tickets_sans_alteration,taux_dispo);
                END IF ;
     
        UNTIL done = 1 END REPEAT;
        CLOSE c;
     
    END
    Le fait d'ajouter deux fois la même ligne a la fin, ça provoque une erreur de clef primaire.
    Je ne sais pas comment éviter ce problème, malgré le fait que j'ai regardé sur pas mal de forums.
    Merci de votre aide =)

  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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    salut,

    ton fetch doit être hors du if, juste avant
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Merci !
    En effet je n'ai pas fait attention (copier-coller tout bête)

    Je n'ai plus la ligne en double ni l'erreur clef primaire dans les log mais par contre maintenant j'ai un warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1	13:46:35	call *******.taux_resolution	0 row(s) affected, 1 warning(s): 1329 No data - zero rows fetched, selected, or processed
    Pourtant tout à l'air de bien fonctionner.
    Je pensais que c'était dans mes différentes requêtes que j'aurais pu faire une erreur mais même sur une autre routine, j'ai exactement la même erreur.

    Peut-être aurais-tu une idée ?
    En tout cas comme d'hab', merci de prendre le temps de me répondre.

    EDIT : Je te copie l'erreur qui conerne la routine ci-dessus mais c'est exactement la même que ma routine "taux_resolution"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1	13:54:33	call ******.disponibilité	0 row(s) affected, 1 warning(s): 1329 No data - zero rows fetched, selected, or processed

  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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    ça doit venir de ton SQL_MODE...
    regarde son réglage:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select @@global.sql_mode;
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Cette requête me donne un résultat vide...

  6. #6
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    bon c'est juste un pb d'environnement d'exécution... tu exécutes ça dans quoi?
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    J'utilise Mysql workBench pour gérer mes serveurs mysql.

  8. #8
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    c'est comme sur heidisql, ils affichent ce type warning ou si tu mets des "if exists" pour un drop...

    mais ça ne devrait pas apparaitre dans les script en utilisation normale...

    teste...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    j'ai cherché un peu partout dans les paramètres mais je n'ai rien vu de bien concluant.
    Je ne fais pas de drop dans mes procédures.

    Si tu me dis que ce n'est pas très grave, je peux laisser...
    Je continue quand même a chercher un peu parce que j'aimerai bien supprimer ce warning mais bon.

  10. #10
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    il apparait aussi mais uniquement dans les outils de développement...

    teste à partir de php
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    dans php... phpmyadmin ?
    Je viens de tester dans phpmyadmin et je n'ai pas le warning.

    Donc oui, comme tu dis ça doit être propre à mysql workbench.

    Toujours pas trouvé où, mais ça doit bien pouvoir se gérer quelque part

  12. #12
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    pas forcément, c'est apparu sans réglage aussi dans heidisql, je pense que c'est une volonté de forcer les logiciels d'admin en mode strict car des utilisateur ne sachant pas régler ça devaient pleurer parce que des warnings n’apparaissaient pas dans certains contextes...

    mais j'avoue que c'est pénible...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Donc si je comprends bien, je ne peux rien y faire.

    Dans ce cas ce n'est pas grave... si mon code est propre et fonctionne, ça me va.

  14. #14
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    chaque logiciel est indépendant... regarde dans ses réglages, mais je crains, en effet, que tu n'y puisses rien

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Ok, eh bien merci quand même, je sais à peu près à quoi ça correspond maintenant et c'est ce qui m'importe le plus.

  16. #16
    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
    Points : 3 296
    Points
    3 296
    Billets dans le blog
    1
    Par défaut
    oublie pas "résolu"
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    merci

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

Discussions similaires

  1. Une requête qui donne des doublons dans les résultats
    Par HDR_16 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/04/2014, 19h51
  2. Réponses: 9
    Dernier message: 10/10/2008, 15h50
  3. Créer une base de donnée en local pour site web local
    Par diophantes dans le forum Accès aux données
    Réponses: 2
    Dernier message: 23/02/2008, 08h36
  4. Réponses: 1
    Dernier message: 06/03/2007, 11h55
  5. Réponses: 4
    Dernier message: 28/10/2005, 17h30

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