2017-11-13 5 views
0

Ich bin verrückt, diesen Auslöser in MySql zu erstellen ... Konnten Sie den Fehler finden? :Fehler 1064 auf Mysql Mehrfachaktion Auslöser

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 ; 
+0

Jede MySQL-Anweisung muss normalerweise einen Terminator haben; –

+0

Ich weiß, aber wenn ich den Terminator einfüge; Die Schnittstelle signiert ein "unerwartetes Zeichen" in der Zeile, und wenn ich versuche, eine SQL-Anweisung einzureichen, gib mir denselben 1064-Fehler zurück ... Andere Ideen? –

Antwort

0

Sie scheinen mit Backticks etwas zufällig gewesen zu sein (ich sie entfernen würde sie nicht benötigt werden) mit Belichtungsreihen und und ein bisschen schonen - das Auswahl Teil des Satzes is_present klammert werden muss, wie Führt die values-Klausel in der insert-Anweisung aus. Und ja, die Aussagen müssen alle mit abgeschlossen werden. Diese Codesyntax für mich.

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 ;