我正在尝试在插入事件之后创建一个触发器;这是触发器的定义:
BEGIN
DECLARE stud INT(11) DEFAULT 0;
DECLARE cd INT(11) DEFAULT 0;
DECLARE sw CURSOR FOR
(SELECT CodiceStudente FROM Listastudenticorsi WHERE CodiceCorso IN
(SELECT CodiceCorso FROM Listanews WHERE CodiceNews IN
(SELECT MAX(Codice) FROM News)));
DECLARE cod CURSOR FOR
(SELECT CodiceDocente FROM Listanews WHERE CodiceNews IN
(SELECT MAX(Codice) FROM News));
OPEN sw;
OPEN cod;
get_loop: LOOP
FETCH sw INTO stud;
FETCH cod INTO cd;
INSERT INTO Inbox(Mittente, Destinatario, Oggetto, Contenuto, Data) VALUES (cd, stud, "Nuova news", "", CURDATE());
END LOOP get_loop;
END
由于某些原因,MySQL 不允许我创建它:它说我必须检查第 17 行“LOOP; END”附近的语法,但据我所知那里的语法是正确的...我不明白出了什么问题,即使我将循环名称放在结束循环之后,也会出现错误。
我不确定错误是否可能出现在 INSERT 指令中:我不确定变量 @cod 的使用;它始终是一个独特的值,但我不确定这是否是导致问题的原因。如果是这样,我该如何更改该指令才能获得相同的结果?
最佳答案
您缺少第 17 行的 END IF;
语句
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE stud VARCHAR(255) DEFAULT "";
DECLARE sw CURSOR FOR
(SELECT CodiceStudente FROM Listastudenticorsi WHERE CodiceCorso IN
(SELECT CodiceCorso FROM Listanews WHERE CodiceNews IN
(SELECT MAX(Codice) FROM News)));
SET @cod = (SELECT CodiceDocente FROM Listanews WHERE CodiceNews IN
(SELECT MAX(Codice) FROM News));
OPEN sw;
get_loop: LOOP
FETCH sw INTO stud;
IF done THEN
LEAVE get_loop;
END IF;
INSERT INTO Inbox(Mittente, Destinatario, Oggetto, Contenuto, Data) VALUES (@cod, @i, stud, "", CURDATE());
END LOOP get_loop;
END;
关于MySQL不接受循环结束指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638212/