2010-08-26 46 views
1

语法明智的,什么是错用下面的查询:MySQL的触发器插入到另一个表

-- 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 ; 

它输出以下错误:如果每年

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 

什么,我试图做的是检查返回1然后我会插入一个新的记录到相应的值的表方案。

回答

2

显然MySQL 5.1不使用ENDIF,而是使用END IF。更不用说失踪了; END IF和END之后。

反正你的看法:)

相关问题