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 syntaxe mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut trigger syntaxe mysql
    Bonjour,

    je n'ai pas l'habitude de faire des triggers sous Mysql.
    Pouvez-vous me dire ce qu'il ne va pas dans mon trigger suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TRIGGER updateTableFiche
    BEFORE UPDATE ON Fiche
    FOR EACH ROW
    BEGIN
    IF  (old.valid_Fiche <> 1) AND (new.valid_Fiche <>1) THEN
         exit;           
    ELSE 
          UPDATE Variables SET VallInt = :old.VallInt + 1;
    END IF;
     
    END
    Merci beaucoup pour votre aide.

  2. #2
    Membre confirmé
    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
    Points : 622
    Points
    622
    Par défaut
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DELIMITER $$
    CREATE TRIGGER updateTableFiche
    BEFORE UPDATE ON Fiche
    FOR EACH ROW
    BEGIN
    IF  (old.valid_Fiche = 1) OR (new.valid_Fiche =1) THEN
           SET new.VallInt = old.VallInt + 1;
    END IF;
     
    END$$

    Mais je ne suis pas sur de ce que tu cherches à faire avec "UPDATE VARIABLES SET VallInt = :old.VallInt + 1;"

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    Pouvez-vous me dire ce qu'il ne va pas dans mon trigger
    Et toi ?
    Tu pourrais expliquer davantage quel problème tu rencontres ?
    Message d'erreur ?
    Pas de résultat ?
    Pas le résultat souhaité ?

    Madame Irma n'est pas disponible pour le moment !

    Deux pistes :
    1) Le code que tu as posté ne comporte pas de DELIMITER.
    En as-tu mis un pour spécifier à MySQL qu'il ne doit pas s'arrêter au premier point-virgule ?

    2) La coloration syntaxique du message semble indiquer que VARIABLES serait un mot du langage SQL, bien qu'il ne figure pas dans la liste de SQLPro et que je ne le trouve pas non plus dans le lexique de son livre.
    Il faut peut-être mettre ce nom de colonne entre apostrophes inversées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Tout d'abord merci pour votre réactivité !

    Citation Envoyé par CinePhil Voir le message
    Et toi ?
    Tu pourrais expliquer davantage quel problème tu rencontres ?
    Message d'erreur ?
    Pas de résultat ?
    Pas le résultat souhaité ?

    Madame Irma n'est pas disponible pour le moment !

    Deux pistes :
    1) Le code que tu as posté ne comporte pas de DELIMITER.
    En as-tu mis un pour spécifier à MySQL qu'il ne doit pas s'arrêter au premier point-virgule ?

    2) La coloration syntaxique du message semble indiquer que VARIABLES serait un mot du langage SQL, bien qu'il ne figure pas dans la liste de SQLPro et que je ne le trouve pas non plus dans le lexique de son livre.
    Il faut peut-être mettre ce nom de colonne entre apostrophes inversées.
    Oui c'est vrai, excuse moi je n'ai rien détaillé...
    Effectivement j'avais oublié les DELIMITER $$.
    Une fois que je les ai mis ça marche un peu mieux.

    Citation Envoyé par Fred_34 Voir le message
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DELIMITER $$
    CREATE TRIGGER updateTableFiche
    BEFORE UPDATE ON Fiche
    FOR EACH ROW
    BEGIN
    IF  (old.valid_Fiche = 1) OR (new.valid_Fiche =1) THEN
           SET new.VallInt = old.VallInt + 1;
    END IF;
     
    END$$

    Mais je ne suis pas sur de ce que tu cherches à faire avec "UPDATE VARIABLES SET VallInt = :old.VallInt + 1;"
    Si tu veux, dans le cas où l'ancienne et la nouvelle valeur de "valid_Fiche" est différente de 1, je dois incrémenter un compteur(attribut "ValInt") se trouvant dans la table "Variables".

    Mon trigger travaille sur 2 tables :
    - Variables => attribut : ValInt
    - Fiche => attribut : valid_Fiche

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Quel est le symbole de comparaison ?
    "<>" OU "!=" ???

    Comment fait on pour sortir d'un trigger ? Le mot clé "exit" ne marche pas ?

    Quand je met le trigger suivant :
    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
    21
    22
    23
    24
    25
    26
    27
     
     DELIMITER $$
     CREATE TRIGGER insertTableFiche
     BEFORE INSERT ON Fiche
     FOR EACH ROW
     BEGIN
     DECLARE compteur INT;
     DECLARE nomVersion varchar(30);
     
     SET  nomVersion = '';
     
     IF (new.type_Fiche = 5) THEN
     SET nomVersion = 'VersionPodcasts';  
     ELSE IF (new.type_Fiche = 1) THEN
     SET nomVersion = 'VersionRadios' ;
     END IF;
     
     
     IF  nomVersion != '' THEN
     
       SELECT ValInt into compteur FROM `Variables` WHERE Nom = nomVersion;
     
       IF  (new.valid_Fiche = 1)  THEN
         UPDATE `Variables` SET new.ValInt = compteur + 1 WHERE Nom = nomVersion;
       END IF;
     END IF;
     END$$
    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
    x to use near '' at line 25

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Ca y'est j'ai trouvé mon erreur !

    En fait c'est pas ELSE IF mais ELSEIF

    Apparemment on peut utiliser les symboles de comparaisons <> et != .

    Merci encore pour vos réponses.

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

Discussions similaires

  1. Erreur de syntaxe sur trigger avec mysql 5.1
    Par WhoIsTiti dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 29/03/2012, 07h18
  2. Trigger syntaxe sur MySQL
    Par Sekigawa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/06/2008, 11h39
  3. Probléme de Syntax MySQL
    Par dunbar dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/08/2006, 01h26
  4. Problème de Triggers sous Mysql 5
    Par petozak dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 14/08/2006, 10h18
  5. Erreur de syntaxe MySQL
    Par lynal dans le forum Requêtes
    Réponses: 9
    Dernier message: 30/05/2006, 10h31

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