Search code examples
mysqltriggersmysql-error-1064

Error 1064 on Mysql multiple action Trigger


I'm going crazy creating this trigger in MySql... Could you find the error? :

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 ;

Solution

  • You seem to have been a bit random with your backticks (I would remove them they aren't required) and and a bit sparing with bracketing - the select part of the set is_present needs to be bracketed as does the values clause in the insert statement. And yes the statements all need to be terminated with ;. This code syntaxs for me.

    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 ;