2016-08-12 5 views
0

Я хотел бы создать триггер в MySQL, но я получаю синтаксическую ошибку. Я попытался запустить запрос с помощью PHPMyAdmin или напрямую из MySQL Client.Ошибка синтаксиса триггера с MySQL

Вот ошибка:

1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса использовать вблизи «» в строке 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 ; 

ответ

0

Я нашел решение, вот хороший запрос:

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

Вы пробовали ELSIF в смене ELSEIF?

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

Да, я получил ту же ошибку ... – Julien

+0

Спасибо, но я до сих пор получил ту же ошибку. Я обновил запрос в своем вопросе – Julien