我快要在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 ;

最佳答案

您似乎对自己的反引号有点随意(我会删除它们不是必需的),并在括号中稍作保留-set is_present的select部分需要与insert语句中的values子句一起括起来。是的,所有语句都必须以;结尾。
此代码语法对我而言。

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 ;

关于mysql - Mysql多重操作触发器上的错误1064,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47271046/

10-16 15:40
查看更多