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 after update et 2 tables


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 56
    Par défaut trigger after update et 2 tables
    Bonjour

    j'ai deux tables
    tb1 et tb2
    avec les mêmes champs id et nom

    je veux que tb2 reflète tout ce qui se passe dans tb1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER trg_un AFTER UPDATE ON tb1
     FOR EACH ROW
     BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;
    END;
    ne marche pas
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4


    quelle est la bonne syntaxe pour mysql 5 ?

    merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 814
    Billets dans le blog
    14
    Par défaut
    C'est peut-être un problème de DELIMITER ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER trg_un AFTER UPDATE ON tb1
     FOR EACH ROW
    DELIMITER// 
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;
    END//
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 averti
    Inscrit en
    Juin 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 56
    Par défaut
    j'obtiens

    Erreur

    Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

    ERROR: Ponctuation invalide @ 66
    STR: //
    SQL: CREATE TRIGGER trg_un AFTER UPDATE ON tb1
    FOR EACH ROW
    DELIMITER//
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;CREATE TRIGGER trg_un AFTER UPDATE ON tb1
    FOR EACH ROW
    DELIMITER//
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;CREATE TRIGGER trg_un AFTER UPDATE ON tb1
    FOR EACH ROW
    DELIMITER//
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;


    requête SQL:

    CREATE TRIGGER trg_un AFTER UPDATE ON tb1 FOR EACH ROW DELIMITER// BEGIN UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;

    MySQL a réponduocumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '//
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom' at line 3

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    je pense qu'il faut un espace entre DELIMITER et le delimiteur à proprement parler

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELIMITER $$
    CREATE TRIGGER trg_un AFTER UPDATE ON tb1
    FOR EACH ROW
    BEGIN
    UPDATE tb2 INNER JOIN tb1 ON tb1.id = tb2.id SET tb2.nom = tb1.nom ;
    END $$

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 56
    Par défaut
    génial ça marche

    merci mille fois

  6. #6
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 56
    Par défaut
    par contre j'arrive pas à le faire marcher entre 2 base de données

    je crée le trigger dans db1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELIMITER $$
    CREATE TRIGGER trg_2db AFTER UPDATE ON db1.tb1
    FOR EACH ROW
    BEGIN
    UPDATE db2.tb1 INNER JOIN db1.tb1 ON db1.tb1.id = db2.tb1.id SET db2.tb1.nom = db1.tb1.nom ;
    END $$

Discussions similaires

  1. [10g] Trigger after update : table mutante
    Par StephSushiSig dans le forum Oracle
    Réponses: 8
    Dernier message: 29/12/2014, 14h37
  2. Réponses: 2
    Dernier message: 11/07/2014, 11h46
  3. Trigger After Update avec la table Deleted vide ?
    Par azur668 dans le forum Développement
    Réponses: 4
    Dernier message: 24/06/2009, 23h41
  4. Trigger After Update
    Par hair_peace dans le forum Oracle
    Réponses: 8
    Dernier message: 23/08/2006, 21h10
  5. TRIGGER After Update
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 20/07/2005, 13h33

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