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 :

Erreur de syntaxe dans un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Erreur de syntaxe dans un trigger
    Bonjour à tous,

    J'ai fait un trigger qui me permet de remplir la table data en fonction de la modification de la table profil_etudiant.

    Le nom des champs est stocké dans la variable nom_colonne. Le but est que si mon old.nom_colonne est différent de mon new.nom_colonne, il fait les instructions.

    Mon problème est que je n'arrive pas à lui faire prendre en compte la valeur de la variable nom_colonne.

    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
    CREATE TRIGGER `share_logins`.`TGR_PROFIL` BEFORE UPDATE ON `share_logins`.`profil_etudiant`
      FOR EACH ROW BEGIN 
     
      DECLARE i INT DEFAULT 0;
      DECLARE nbCol INT DEFAULT 0;
      DECLARE nom_colonne TEXT DEFAULT '';
      DECLARE myOld TEXT DEFAULT '';
      DECLARE myNew TEXT DEFAULT '';
      SELECT COUNT(*) INTO nbCol FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'profil_etudiant';
         WHILE i < nbCol DO
             SET i = i + 1;
             SELECT column_name INTO nom_colonne FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'profil_etudiant' AND ordinal_position = i ;
             SET myOld = CONCAT('old.', nom_colonne) ; 
             SET myNew = CONCAT(new,'.' , nom_colonne) ; 
             IF myOld <> myNew THEN 
                  INSERT INTO data(id_user, nomChamp, date, valeur) VALUES (new.id, nom_colonne, now(), myNew);
             END IF;
          END WHILE;  
       END
    //

    Comme vous pouvez le voir, j'ai essayé avec CONCAT, mais il ne reconnaît plus le new et old. Il me prend le tout comme une string (CONCAT du old) ou me ressort une erreur (CONCAT du new). J'ai essayé les 2 cela ne fonctionne pas.

    ça doit être un problème de syntaxe mais là je sèche depuis plusieurs jours dessus

    Quelqu'un pourrait-il me dire comment faire pour qu'il prenne new.nom_colonne comme new.adresse (par exemple) et non pas new.nom_colonne?

    J'espère avoir réussi à être clair....

    Merci de vos réponses!!

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 381
    Points
    5 381
    Par défaut
    Salut moi aussi je galère un peu comme toi avec la syntaxe.

    J'ai un peu de mal avec une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET myNew = CONCAT(new,'.' , nom_colonne)
    Que vaut new ? Il me semble que c'est le résultat de la requete en cours.

    J'ai l'impression que ton test myOld <> myNew es toujours vrai, tu compares 2 chaine de caractères dont la première commence par "old.", c'est sur que la 2e ne commencera jamais par ca.

    je n'ai pas testé, mais essaie avec @ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT(new,'.' , @nom_colonne)
    Ca peut peut-etre fonctionner.

    je ne sais pas ce que c'est que @ mais pour moi, quand je ne le met pas j'ai une erreur dans la création de ma procédure stockée.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    En fait mon myNew et myOld devrait contenir les valeurs du champs avant et après l'update.

    Et là il compare "new.nom_du_champ" et "old.nom_du_champ". Donc ce test retourne effectivement toujours true....

    J'ai testé ton exemple, il donne le même résultat. Je suis vraiment coincé là.

    Merci quand même Fregolo52.

    J'ai aussi tenté PREPARE et EXECUTE mais rien y fait.

    Quelqu'un aurait-il encore une idée??

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2006, 00h22
  2. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  3. erreur de syntaxe dans l'instructiuon insert into
    Par greg64 dans le forum Access
    Réponses: 6
    Dernier message: 13/04/2006, 14h07
  4. Erreur de syntaxe dans une requete
    Par linou dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/08/2005, 12h44
  5. [JSP]Erreur de syntaxe dans un tag <option select
    Par logica dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 03/05/2005, 14h33

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