Mysql 多动作触发器上的错误 1064

Error 1064 on Mysql multiple action Trigger

我要在 MySql 中创建这个触发器... 你能找到错误吗? :

DELIMITER $$
CREATE TRIGGER `Gestione_qty_mov_magazzino` AFTER
INSERT ON `dj3u9lk_pods_flusso_merci_magazzi` FOR EACH ROW
BEGIN  
DECLARE is_present INT default 0
SET is_present = SELECT COUNT(`dj3u9lk_pods_archivio_magazzino`.codice_articolo) FROM `dj3u9lk_pods_archivio_magazzino` WHERE `dj3u9lk_pods_archivio_magazzino`.codice_articolo = NEW.codice_articolo)
IF (is_present > 0) THEN
        UPDATE `dj3u9lk_pods_archivio_magazzino`
        SET `dj3u9lk_pods_archivio_magazzino`.quantita_presente = `dj3u9lk_pods_archivio_magazzino`.quantita_presente + NEW.quantita
        WHERE `dj3u9lk_pods_archivio_magazzino`.codice_articolo = NEW.codice_articolo AND NEW.tipo_movimentazione = 0
ELSE
        INSERT INTO `dj3u9lk_pods_archivio_magazzino` (codice_articolo) 
        VALUES NEW.codice_articolo      
END

 END$$
DELIMITER ;

你的反引号似乎有点随意(我会删除它们,它们不是必需的)并且对括号有点保留 - select 集合的一部分 is_present需要像插入语句中的值子句一样放在括号中。是的,所有语句都需要以 ; 结尾。 此代码语法适合我。

DELIMITER $$
CREATE TRIGGER Gestione_qty_mov_magazzino AFTER
INSERT ON dj3u9lk_pods_flusso_merci_magazzi FOR EACH ROW
BEGIN  
DECLARE is_present INT default 0;
SET is_present = (
        SELECT COUNT(dj3u9lk_pods_archivio_magazzino.codice_articolo) 
        FROM dj3u9lk_pods_archivio_magazzino 
        WHERE dj3u9lk_pods_archivio_magazzino.codice_articolo = NEW.codice_articolo
        ) ;
IF is_present > 0 THEN
        UPDATE dj3u9lk_pods_archivio_magazzino
        SET dj3u9lk_pods_archivio_magazzino.quantita_presente = dj3u9lk_pods_archivio_magazzino.quantita_presente + NEW.quantita
        WHERE dj3u9lk_pods_archivio_magazzino.codice_articolo = NEW.codice_articolo AND NEW.tipo_movimentazione = 0
    ;
ELSE
        INSERT INTO dj3u9lk_pods_archivio_magazzino (codice_articolo) 
        VALUES (NEW.codice_articolo)      ;
END if;

END $$
DELIMITER ;