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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    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
    Billets dans le blog
    1
    Par défaut
    salut,

    ton fetch doit être hors du if, juste avant

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    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
    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;

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    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
    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?

+ 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, 18h51
  2. Réponses: 9
    Dernier message: 10/10/2008, 14h50
  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, 07h36
  4. Réponses: 1
    Dernier message: 06/03/2007, 10h55
  5. Réponses: 4
    Dernier message: 28/10/2005, 16h30

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