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 :

Trigger - Problème INTO ou IF


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut Trigger - Problème INTO ou IF
    Bonjour à tous,

    Voilà mon trigger :

    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
    delimiter // 
    CREATE TRIGGER t_messages_trig_insert BEFORE INSERT ON t_messages 
    FOR EACH ROW 
    BEGIN 
     
    DECLARE nbMsg, admin integer;
     
    UPDATE s_personnages
    SET nbTest = nbTest + 30, nbTotalTest = nbTotalTest + 30
    WHERE idUtilisateur = NEW.idComptePrin;
     
    SELECT count(*), p.admin into @nbMsg, @admin 
    FROM t_messages m, s_personnages p
    WHERE p.idUtilisateur = m.idComptePrincipal
    AND idComptePrincipal = NEW.idComptePrincipal;
     
    IF @nbMsg > 50 THEN
    UPDATE s_personnages
    SET test2 = test2 + 5
    WHERE idUtilisateur = NEW.idComptePrin;
    ELSEIF @admin=0 THEN
    UPDATE s_personnages
    SET test1 = test1 + 5
    WHERE idUtilisateur = NEW.idComptePrin;
    END IF;
     
    END// 
    delimiter ;
    Le update (première requête) est OK.

    J'ai l'impression que c'est la seconde requête qui plante, que les valeurs attribuées aux variables ne sont pas les bonnes... Pourtant lorsque je fais la requête directement en sql, elle me donne le résultat souhaité. Le résultat souhaité respecte la condition du IF et du ELSEIF et pourtant, aucune des 2 requêtes n'est appliquée. Si je mets un ELSE, c'est la requête du else qui est appliquée....

    Pourtant, j'ai trouvé partout que c'était bien ainsi qu'on attribuait une valeur à une variable...

    J'ai vraiment l'impression de tourner en rond, alors si la solution vous saute aux yeux, donnez-moi quelques indications.

    Merci à vous !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Suggestion : ne manquerait-il pas un GROUP BY dans la requête SELECT ... INTO ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour et merci pour votre réponse.

    Alors ma requête ne retourne qu'une seule occurrence ; mon idComptePrincipal est unique.

    Et ma requête fonctionne bien comme il faut lorsque je la teste directement dans le requêteur MySQL, elle me retourne les données que je souhaite pour l'idComptePrincipal souhaité.

    Je pensais que j'avais un problème de syntaxe basique mais si rien ne te choque dans ma requête alors l'erreur doit être autre part mais où...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Et en supprimant les arobases devant vos variables ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour et merci pour votre réponse, est-ce que je devrais les enlever après le into (dans la requête) ? Ou dans les tests IF ? Partout ?
    En tout cas je vais essayer.

    Encore merci.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je dirai partout, puisqu'il s'agit de variables locales au trigger. Après je ne connais pas bien MySQL.
    Essayez et faites nous un retour !

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    J'ai essayé en retirant les @ dans le IF.
    J'ai essayé en retirant les @ partout.

    Ça ne marche pas...

    J'arrive à faire des IF lorsque j'utilise le NEW.nomChamp / OLD.nomChamp > XXX.
    Mais dès qu'il s'agit d'utiliser les variables, il y a un truc qui cloche. :/

    Je suis un peu bloquée.

    Mais merci quand même pour ton aide.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Avez-vous essayé d'ajouter le GROUP BY ?
    Syntaxiquement c'est plus juste et peut-être que c'est ça qui coince en mode procédural alors que le mauvais MySQL trop permissif le laisse passer en SQL simple.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Par ailleurs :
    Vous avez fait un trigger BEFORE insert.

    Du coup, les données qui sont insérées (déclenchant le trigger) ne sont pas encore présentes dans la table message. Cela peut changer le résultat attendu par la requête qui précède votre IF...

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Le GROUP BY ne résout pas le problème. J'ai bien fait le test.

    J'ai continué l'investigation :

    J'ai fait un insert into de mes 2 vars dans une table de test.
    La var qui contient le count OK.

    La var admin est null.

    -> D'où le pb.

    La var admin est integer dans la table test et dans le trigger.
    Et dans la table personnage elle est de type tinyint(1).

    Quoi qu'il arrive cette valeur peut-être de 0, de 1 ou de -1.

    Est-ce que le problème vient du type?

    Quand je mets TinyInt(1) dans le trigger et dans la table test ça ne marche pas non plus... L'ajout à la table de test n'est même pas effectué.

    EDIT : Aieuuu -> Je n'ai pas fait attention, je vais jeter un oeil sur ce point alors
    RE EDIT : Ça ne doit pas affluer... Sauf pour le nombre de message, le changement de la val admin aura lieu pour le 51e message au lieu du 50e mais ça c'est pas grave.

    En tout cas, merci pour vos réponses à tous les 2.
    Je continue de creuser.

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    sinon fournissez le CREATE TABLE des table en jeu, plus un jeu d'essai.

    Avoir la structure des tables pourra nous être utile pour vous aider à trouver la source du problème...

    Quant au GROUP BY que vous avez ajouté... pouvez-vous poster la nouvelle requete ?

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    En fait ça marche !!!

    J'avais mis la var admin en tinyint(1) mais j'avais supprimé ma requête d'insertion à la table test.
    La solution était donc de mettre les types pareil partout.

    Bon je suis désolée pour le dérangement la solution était assez simple finalement...
    En tout cas merci quand même à tous les 2 ! ^^

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

Discussions similaires

  1. Trigger, problème de table mutante
    Par waukine dans le forum PL/SQL
    Réponses: 7
    Dernier message: 24/04/2008, 16h03
  2. Trigger - Problème Récupération valeur
    Par Silvia12 dans le forum Développement
    Réponses: 6
    Dernier message: 02/05/2007, 17h51
  3. [trigger] problème de mise à jour
    Par Ouark dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/03/2006, 01h13
  4. Calcul dans un triggers : problème du +
    Par eXiaNazaire dans le forum Oracle
    Réponses: 3
    Dernier message: 07/01/2005, 10h14
  5. [Trigger] Problème de curseur
    Par Superstivix dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/06/2004, 10h30

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