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 :

error near TRIGGER


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut error near TRIGGER
    Bonjour, j'ai ce probleme lors de la création de n'importe quel "trigger" sur mysql !!!

    error 1064 (42000): you have an error in your SQL syntax; check the manuel that corresponds to your MySQL server version for the right syntax to use near TRIGGER .........' at line 1.
    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    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 818
    Billets dans le blog
    14
    Par défaut
    C'est bien de nous donner le message d'erreur mais sans le code qui a provoqué l'erreur... c'est comme si tu nous donnais une clé sans nous dire quelle serrure elle ouvre !
    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
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut
    Bonjour, vous avez raison:

    voila mon code:

    Aprés avoir créer correctement la table tab1(id, val1).
    Je veux ajouter des contraintes d'integrités avec check pour dire que val1 doit etre toujours superieur a 10 mais comme check ne marche pas sur mysql alors j'ai fait le trigger suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql>delimiter $$
    >create trigger trg after insert on tab1
    >begin
    >if (val1<10) then
    >return false;
    >end if;
    >end
    >|
    l'erreur déjà montionnée, se localise toujours au mot "trigger" a la ligne 1.

    Noter que j'ai essayé meme de changer de minuscule a majuscule mais noooooooooooo thing qui change !!!!!!!

    j'ai essayé aussi de changer le delimiter de $$ à | ou ;; mais noooooooo thing qui change.

    j'ai essayé aussi de faire "create" a la ligne 1 puis à la ligne 2 j'ai mis le reste "trigger on tab1", je remarque que l'erreur sera à la ligne 2, donc la conclusion est que son probleme est au mot "trigger" !!!




    Citation Envoyé par CinePhil Voir le message
    C'est bien de nous donner le message d'erreur mais sans le code qui a provoqué l'erreur... c'est comme si tu nous donnais une clé sans nous dire quelle serrure elle ouvre !

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Il te manque FOR EACH ROW

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    Il te manque FOR EACH ROW
    Merci pour la remarque, oui je fait . Juste j'ai mal copié le code.

    Donc, le probléme est le meme !!!!!!!!!!!!!!!!!!!!!!

    c'est :
    error 1064 (42000): you have an error in your SQL syntax; check the manuel that corresponds to your MySQL server version for the right syntax to use near TRIGGER .........' at line 1.


    1)- Est ce que Mysql differencie entre minuscule et majuscule ???!!!



    2)- normalement puisque c'est indiqué à ligne 1 , donc la faute est au ligne 1, c'est ça???? mais lorsque je fais :
    [code=sql]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create
    trigger trg_name
    after insert on tab1
    ....
    L'erreur se deplace en ligne2 !!!!!!!!!!!!

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Si tu es en 5.5 tu devrais pouvoir faire comme ça ( Il te faut un trigger "BEFORE INSERT" et non "AFTER INSERT" ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELIMITER $$
    CREATE TRIGGER trg BEFORE INSERT ON tab1
    FOR EACH ROW
    BEGIN
      IF (NEW.val1<10) then
        SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Val1 is too small...';
      END IF;
    END$$

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut
    Merci bcps pour la reponse

    Mais comment connaitre la version de Mysql, car je travaille sur un serveur distant , ce n'est pas un SGBD local sur ma machine !!



    Citation Envoyé par Fred_34 Voir le message
    Si tu es en 5.5 tu devrais pouvoir faire comme ça ( Il te faut un trigger "BEFORE INSERT" et non "AFTER INSERT" ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELIMITER $$
    CREATE TRIGGER trg BEFORE INSERT ON tab1
    FOR EACH ROW
    BEGIN
      IF (NEW.val1<10) then
        SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Val1 is too small...';
      END IF;
    END$$

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW VARIABLES LIKE "version"
    Mais je suppose que si tu as une ancienne version, tu ne vas pas pouvoir créer le trigger.

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut
    Yes,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW VARIABLES LIKE "%version%";
    Donc, la version sur laquelle je travaille est : 4.1.20 !!

  10. #10
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    d'après la doc le support des triggers commence à partir de la version 5.0.2

    dans ton code initial tu as en effet oublié le "for each row" et tu dis utiliser le délimiteur "$$" mais tu utilises au final "|"

    enfin y a pas de "return" dans un trigger, c'est pas une fonction...

    @fred34, rien ne l’empêche de faire un before ou after insert, tout dépend de ce qu'elle veut faire...

    pour revenir à ";" comme délimiteur, tu dois mettre à la fin:


  11. #11
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 33
    Par défaut
    Migration vers version 5, c'est resolu. Merci.

    Citation Envoyé par ericd69 Voir le message
    d'après la doc le support des triggers commence à partir de la version 5.0.2

    dans ton code initial tu as en effet oublié le "for each row" et tu dis utiliser le délimiteur "$$" mais tu utilises au final "|"

    enfin y a pas de "return" dans un trigger, c'est pas une fonction...

    @fred34, rien ne l’empêche de faire un before ou after insert, tout dépend de ce qu'elle veut faire...

    pour revenir à ";" comme délimiteur, tu dois mettre à la fin:


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

Discussions similaires

  1. erreur : syntax error near unexpected token
    Par lapinou8430 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 28/04/2009, 00h30
  2. SQLite error near à la lecture d'une donnée texte
    Par ernie74 dans le forum SQLite
    Réponses: 4
    Dernier message: 04/01/2009, 06h13
  3. error near "(" :syntax error
    Par elekis dans le forum SQLite
    Réponses: 1
    Dernier message: 26/09/2008, 23h37
  4. [sh] syntax error near unexpected token `}'
    Par vercin dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/09/2007, 11h33
  5. [dump SQL] syntax error near 'ENGINE=MyISAM
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/09/2006, 12h33

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