创建MySQL触发器时​​出现语法错误

时间:2013-10-27 18:06:34

标签: mysql triggers mysql-error-1064

我在尝试触发时遇到了一些问题。

这是我对触发器的MySQL查询:

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN (
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE (temp%6<>0) temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
    )
END IF;
END //

错误是

  

#1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法; WHILE(temp%6&lt;&gt; 0)temp = temp + 1;结束时间;在第8行更新strutture SET'

有人知道我为什么会收到此错误吗?

1 个答案:

答案 0 :(得分:2)

删除THEN子句周围的括号。您的WHILE子句在语法上也是不正确的:

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE temp%6<>0 DO
      SET temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
END IF;
END //