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