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 l'execution d'un trigger


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut problème de l'execution d'un trigger
    Bonjour,

    j'ai ce fonction trigger que j'ai crée

    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
    CREATE TRIGGER counts
            AFTER INSERT ON logs
            FOR EACH ROW
            BEGIN
            CASE WHEN NEW.lo>DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN
            INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE seen=seen + 1, lastseen=GREATEST(NEW.lo,lastseen), hidden=false;
            UPDATE mne SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.mne;
            UPDATE snare_eid SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE eid=NEW.eid;
            UPDATE programs SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.program;
            INSERT INTO cache (name,value,updatetime) VALUES ('msg_sum',1,NEW.lo) ON DUPLICATE KEY UPDATE value=value + 1,updatetime=NEW.lo;
           ELSE
            INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE lastseen=GREATEST(NEW.lo,lastseen), hidden= false;
            UPDATE snare_eid SET lastseen=GREATEST(NEW.lo,lastseen), hidden= false WHERE eid=NEW.eid;
     
            END;
    le terminal de mysql m'affiche ces erreurs.

    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
    ERROR 1064 (42000): 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 'END' at line 1
    mysql>        CREATE TRIGGER counts
        ->         AFTER INSERT ON logs
        ->         FOR EACH ROW
        ->         BEGIN
        ->         CASE WHEN NEW.lo>DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN
        ->         INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE seen=seen + 1, lastseen=GREATEST(NEW.lo,lastseen), hidden=false;
    ERROR 1064 (42000): 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 6
    mysql>         UPDATE mne SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.mne;
    ERROR 1054 (42S22): Unknown column 'NEW.mne' in 'where clause'
    mysql>         UPDATE snare_eid SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE eid=NEW.eid;
    ERROR 1054 (42S22): Unknown column 'NEW.eid' in 'where clause'
    mysql>         UPDATE programs SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.program;
    ERROR 1054 (42S22): Unknown column 'NEW.program' in 'where clause'
    mysql>         INSERT INTO cache (name,value,updatetime) VALUES ('msg_sum',1,NEW.lo) ON DUPLICATE KEY UPDATE value=value + 1,updatetime=NEW.lo;
    ERROR 1054 (42S22): Unknown column 'NEW.lo' in 'field list'
    aidez moi de les corriger
    merci d'avance

  2. #2
    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
    Commence par remplacer le case par un if :

    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
    CREATE TRIGGER counts
    AFTER INSERT ON logs
    FOR EACH ROW
    BEGIN
    	IF ( NEW.lo>DATE_SUB(NOW(), INTERVAL 1 HOUR) )THEN
    		INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE seen=seen + 1, lastseen=GREATEST(NEW.lo,lastseen), hidden=false;
    		UPDATE mne SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.mne;
    		UPDATE snare_eid SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE eid=NEW.eid;
    		UPDATE programs SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.program;
    		INSERT INTO cache (name,value,updatetime) VALUES ('msg_sum',1,NEW.lo) ON DUPLICATE KEY UPDATE value=value + 1,updatetime=NEW.lo;
    	ELSE
    		INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE lastseen=GREATEST(NEW.lo,lastseen), hidden= false;
    		UPDATE snare_eid SET lastseen=GREATEST(NEW.lo,lastseen), hidden= false WHERE eid=NEW.eid;
    	END IF;
    END;
    Il faudrait la structure des tables pour les autres erreurs.

  3. #3
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    Commence par remplacer le case par un if :

    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
    CREATE TRIGGER counts
    AFTER INSERT ON logs
    FOR EACH ROW
    BEGIN
    	IF ( NEW.lo>DATE_SUB(NOW(), INTERVAL 1 HOUR) )THEN
    		INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE seen=seen + 1, lastseen=GREATEST(NEW.lo,lastseen), hidden=false;
    		UPDATE mne SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.mne;
    		UPDATE snare_eid SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE eid=NEW.eid;
    		UPDATE programs SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.program;
    		INSERT INTO cache (name,value,updatetime) VALUES ('msg_sum',1,NEW.lo) ON DUPLICATE KEY UPDATE value=value + 1,updatetime=NEW.lo;
    	ELSE
    		INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE lastseen=GREATEST(NEW.lo,lastseen), hidden= false;
    		UPDATE snare_eid SET lastseen=GREATEST(NEW.lo,lastseen), hidden= false WHERE eid=NEW.eid;
    	END IF;
    END;
    Il faudrait la structure des tables pour les autres erreurs.
    merci pour votre réponse

    voici les erreurs après la remplacement de case

    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
     INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE seen=seen + 1, lastseen=GREATEST(NEW.lo,lastseen), hidden=false;
    ERROR 1064 (42000): 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 7
    mysql>         UPDATE mne SET seen=seen + 1, lastseen=NEW.lo, hidden= false WHERE crc=NEW.mne;
           ELSE
    ERROR 1054 (42S22): Unknown column 'NEW.mne' in 'where clause'
            INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE lastseen=GREATEST(NEW.lo,lastseen), hidden= false;
    mysql>         UPDATE snare_eid SET seen=seen + 1, lastseen=NEW.lo, hidden=false WHERE eid=NEW.eid;
     
      END IF;
     
    ERROR 1054 (42S22): Unknown column 'NEW.eid' in 'where clause'
            END;mysql>         UPDATE programs SET seen=seen + 1, lastseen=NEW.lo, hidden=false WHERE crc=NEW.program;
    ERROR 1054 (42S22): Unknown column 'NEW.program' in 'where clause'
    mysql>         INSERT INTO cache (name,value,updatetime) VALUES ('msg_sum',1,NEW.lo) ON DUPLICATE KEY UPDATE value=value + 1,updatetime=NEW.lo;
    ERROR 1054 (42S22): Unknown column 'NEW.lo' in 'field list'
    mysql>        ELSE
        ->         INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON DUPLICATE KEY UPDATE lastseen=GREATEST(NEW.lo,lastseen), hidden= false;
    ERROR 1064 (42000): 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 'ELSE
            INSERT INTO hosts(host,lastseen,seen) VALUES (NEW.host,NEW.lo,1) ON' at line 1
    mysql>
    mysql>   END IF;
    ERROR 1064 (42000): 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 'END IF' at line 1
    mysql>
    mysql>         END;
    ERROR 1064 (42000): 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 'END' at line 1

  4. #4
    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
    salut,

    toutes les colonnes que tu décris avec new n'existent pas, c'est ce qu'il te dit...

    vérifie la structure de ta table counts

  5. #5
    Membre très actif
    Inscrit en
    Février 2008
    Messages
    475
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 475
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,

    toutes les colonnes que tu décris avec new n'existent pas, c'est ce qu'il te dit...

    vérifie la structure de ta table counts
    merci pour votre réponse
    main les colonnes sont existe
    tabler logs

    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
    +----------+---------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
    | Field    | Type                                                                                                                | Null | Key | Default             | Extra          |
    +----------+---------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
    | id       | bigint(20) unsigned                                                                                                 | NO   | PRI | NULL                | auto_increment |
    | host     | varchar(128)                                                                                                        | NO   | MUL | NULL                |                |
    | facility | enum('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23') | NO   | MUL | NULL                |                |
    | severity | enum('0','1','2','3','4','5','6','7')                                                                               | NO   | MUL | NULL                |                |
    | program  | int(10) unsigned                                                                                                    | NO   | MUL | NULL                |                |
    | msg      | varchar(2048)                                                                                                       | NO   |     | NULL                |                |
    | mne      | int(10) unsigned                                                                                                    | NO   | MUL | NULL                |                |
    | eid      | int(10) unsigned                                                                                                    | NO   | MUL | 0                   |                |
    | suppress | datetime                                                                                                            | NO   | MUL | 2010-03-01 00:00:00 |                |
    | counter  | int(11)                                                                                                             | NO   |     | 1                   |                |
    | fo       | datetime                                                                                                            | NO   | MUL | NULL                |                |
    | lo       | datetime                                                                                                            | NO   | PRI | NULL                |                |
    | notes    | varchar(255)                                                                                                        | NO   |     | NULL                |                |
    +----------+---------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
    table hosts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    +----------+------------------+------+-----+---------+----------------+
    | Field    | Type             | Null | Key | Default | Extra          |
    +----------+------------------+------+-----+---------+----------------+
    | id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | host     | varchar(128)     | NO   | UNI | NULL    |                |
    | lastseen | datetime         | NO   |     | NULL    |                |
    | seen     | int(10) unsigned | NO   |     | 1       |                |
    +----------+------------------+------+-----+---------+----------------+
    merci d'avance

  6. #6
    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
    mais moi je te parle de ta table counts... c'est sur elle que porte le trigger...

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

Discussions similaires

  1. problème de mise à jour via un trigger
    Par clement42 dans le forum Sybase
    Réponses: 4
    Dernier message: 17/01/2007, 10h29
  2. problème d'update dans une fonction trigger (before)
    Par ctobini dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/09/2006, 17h08
  3. Problème d'execution d'un trigger
    Par berceker united dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 25/06/2006, 04h22
  4. Problème avec les délimiteurs dans un trigger
    Par Invité dans le forum DB2
    Réponses: 4
    Dernier message: 01/05/2006, 22h53
  5. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42

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