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 actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    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 éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

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

    Et puis UPDATE
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  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 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    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 actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    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 actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    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 actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    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 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    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 éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 904
    Points : 6 027
    Points
    6 027
    Par défaut
    Il me semble avoir déjà vu des posts ici concernant le délimiteur sous phpMyadmin...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    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