2010-08-26 2 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.

Thanx в любом случае для ваших просмотров :)

Смежные вопросы