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 :

Problème de syntaxe sur un TRIGGER (erreur 1064)


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Problème de syntaxe sur un TRIGGER (erreur 1064)
    Bonjour,

    quelqu'un pourrait-il m'expliquer pourquoi le trigger suivant ne passe pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe 
    BEGIN
    SET NEW.datetime_creation = NOW();
    END
    Message d'erreur de PhpMyAdmin :
    requête SQL:

    CREATE OR UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe
    BEGIN
    SET
    NEW.datetime_creation = NOW( ) ;

    MySQL a répondu:
    #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 'UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe
    BEGIN
    SET NEW' at line 1
    Merci d'avance parce je m'arrache les cheveux depuis ce midi...
    @ bientôt

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Semble manquer FOR EACH ROW, cf syntaxe : http://dev.mysql.com/doc/refman/5.0/...e-trigger.html

    Et puis UPDATE

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Pas sûr non plus que l'UPDATE soit accepté dans la syntaxe (ce qui est visiblement le cas, vu où démarre la citation du message d'erreur).
    Pour mettre à jour un trigger sous MySQL, on le DROP puis on le recrée par CREATE.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    désolé, c'était mon dernier test de syntaxe...

    J'ai également tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe FOR EACH ROW 
    SET NEW.datetime_creation = NOW();
    donne
    #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 'UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe FOR EACH ROW
    S' at line 1
    et puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe FOR EACH ROW 
    BEGIN
    SET NEW.datetime_creation = NOW();
    END
    donne
    #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 'UPDATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe FOR EACH ROW
    B' at line 1
    UPDATE ? où ça ?

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    croisement de post....

    dernier essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DROP TRIGGER IF EXISTS insert_datetime_groupe;
    CREATE TRIGGER insert_datetime_groupe BEFORE INSERT ON t_groupe FOR EACH ROW 
    BEGIN
    SET NEW.datetime_creation = NOW();
    END
    donne
    #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 '' at line 3

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    bon après de longs essais, il semblerait que le problème vient de PhpMyAdmin 2.11.9.4 car en mode console la création du trigger suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP TRIGGER IF EXISTS insert_datetime_groupe;
     
    delimiter $$
    CREATE TRIGGER insert_datetime_groupe 
    BEFORE INSERT ON t_groupe 
    FOR EACH ROW BEGIN
    SET NEW.datetime_creation = NOW();
    SET NEW.datetime_modification = NOW();
    END;
    $$
    delimiter ;
    et pour vous, ma syntaxe vous parait correct ?

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Si la syntaxe fonctionne en mode console, alors c'est qu'elle est juste .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  8. #8
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Il me semble avoir déjà vu des posts ici concernant le délimiteur sous phpMyadmin...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP TRIGGER IF EXISTS insert_datetime_groupe;
     
    delimiter $$
    CREATE TRIGGER insert_datetime_groupe 
    BEFORE INSERT ON t_groupe 
    FOR EACH ROW BEGIN
    SET NEW.datetime_creation = NOW();
    SET NEW.datetime_modification = NOW();
    END;
    $$
    delimiter ;
    J'aurais enlevé le ; après le END:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DROP TRIGGER IF EXISTS insert_datetime_groupe;
     
    delimiter $$
    CREATE TRIGGER insert_datetime_groupe 
    BEFORE INSERT ON t_groupe 
    FOR EACH ROW BEGIN
    SET NEW.datetime_creation = NOW();
    SET NEW.datetime_modification = NOW();
    END$$
    delimiter ;

Discussions similaires

  1. Erreur de syntaxe sur un trigger
    Par mmahouac dans le forum Développement
    Réponses: 1
    Dernier message: 07/04/2009, 17h15
  2. Problème de focus sur fenêtre d'erreur
    Par Djoul dans le forum VBScript
    Réponses: 1
    Dernier message: 08/07/2008, 16h24
  3. Réponses: 7
    Dernier message: 24/06/2008, 16h31
  4. Problème de syntaxe sur UPDATE
    Par pgu64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/04/2008, 19h26
  5. [MySQL] problème de syntaxe sur la récupération des données
    Par soshin dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 23/11/2006, 12h34

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