2010-08-26 8 views
1

Syntaxe sage, ce qui ne va pas avec la requête suivante:Déclencheurs MySQL insérer dans une autre table

-- Trigger DDL Statements 
DELIMITER $$ 

USE `mydb`$$ 

DROP TRIGGER IF EXISTS annual_scenario; 

CREATE TRIGGER annual_scenario 
AFTER INSERT ON quote FOR EACH ROW 
BEGIN 
    SET @annual_date = (SELECT NEW.date - INTERVAL 1 YEAR); 
    SET @annual = (SELECT COUNT(DISTINCT Q.date) 
        FROM quote Q, instrument I 
        WHERE Q.date = I.date 
        AND Q.ticker = I.date 
        AND Q.market = I.date 
        AND I.type != 'bank' 
        AND Q.date = @annual_date 
        AND Q.ticker = NEW.ticker 
        AND Q.market = NEW.market 
       ); 
    SET @annual_close = (SELECT Q.close 
         FROM quote Q 
         WHERE Q.ticker = NEW.ticker 
          AND Q.date = @annual_date 
          AND Q.market = NEW.market 
         ); 

    SET @ratio = (NEW.close/@annual_close); 

    IF @annual = 1 THEN 
     INSERT INTO 
     scenario(period,ticker,date_1,date_2,close_1,close_2,ratio) 
     VALUES('annual',NEW.ticker,NEW.date,@annual_date,NEW.close,@annual_close,@ratio); 
    ENDIF 
END $$ 
DELIMITER ; 

Il génère l'erreur suivante:

Error Code: 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 'CREATE TRIGGER annual_scenario 
AFTER INSERT ON quote FOR EACH ROW 
BEGIN 
    SE' at line 2 

Ce que je suis en train de faire est de vérifier si chaque année renvoie 1 puis j'insérerais un nouvel enregistrement dans le scénario de table avec les valeurs correspondantes.

Répondre

2

Apparemment, MySQL 5.1 n'utilise pas ENDIF mais utilise END IF. encore moins les disparus; après END IF et END. Merci pour votre avis :)

Questions connexes