2016-08-12 4 views
0

Ich möchte einen Trigger in MySQL erstellen, aber ich bekomme einen Syntaxfehler. Ich habe versucht, Abfrage mit PHPMyAdmin oder direkt von MySQL Client zu starten.Trigger Syntaxfehler mit MySQL

Hier ist der Fehler:

1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden ‚‘ in Zeile 5

CREATE TRIGGER asterisk.bi_queueEvents BEFORE INSERT ON aasterisk.queue_log 
FOR EACH ROW 
BEGIN 
IF (NEW.event = 'ADDMEMBER')THEN 
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
ELSIF (NEW.event = 'REMOVEMEMBER')THEN 
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'LOGGEDOUT',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "LOGGEDOUT", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
ELSIF (NEW.event = 'PAUSE')THEN 
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'PAUSE',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "PAUSE", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
ELSIF (NEW.event = 'UNPAUSE')THEN 
INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
END IF; 
END ; 
// 

DELIMITER ; 

Antwort

0

ich die Lösung gefunden haben, hier ist die gute Anfrage:

delimiter | 
CREATE TRIGGER bi_queueEvents 
BEFORE INSERT ON queue_log 
FOR EACH ROW 
BEGIN 
    IF NEW.event = 'ADDMEMBER' THEN 
     INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) 
     VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
    ELSEIF NEW.event = 'REMOVEMEMBER' THEN 
     INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) 
     VALUES (NEW.agent,'LOGGEDOUT',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "LOGGEDOUT", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
    ELSEIF NEW.event = 'PAUSE' THEN 
     INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) 
     VALUES (NEW.agent,'PAUSE',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "PAUSE", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
    ELSEIF NEW.event = 'UNPAUSE' THEN 
     INSERT INTO agent_status (agentId,agentStatus,timestamp,callid) 
     VALUES (NEW.agent,'READY',FROM_UNIXTIME(NEW.time),NULL) ON DUPLICATE KEY UPDATE agentStatus = "READY", timestamp = FROM_UNIXTIME(NEW.time), callid = NULL; 
    END IF; 
END | 
delimiter ; 
0

Haben Sie ELSIF anstelle von ELSEIF versucht?

IF(boolean_expression 1)THEN 
    S1; -- Executes when the boolean expression 1 is true 
ELSIF(boolean_expression 2) THEN 
    S2; -- Executes when the boolean expression 2 is true 
+0

Ja, ich habe den gleichen Fehler habe ... – Julien

+0

Danke, aber ich habe immer noch den gleichen Fehler. Ich habe die Anfrage in meiner Frage aktualisiert – Julien