[英]MySQL doesn't accept loop end instruction
我正在嘗試在插入事件后創建觸發器; 這是觸發器的定義:
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”附近的語法,但據我所知那里的語法是正確的...我不知道無法理解問題所在,即使我將循環名稱放在end循環之后,也會顯示錯誤。
我不確定錯誤是否可能在INSERT指令中:我不確定變量@cod的使用。 它始終是唯一的值,但是我不確定是否是引起問題的原因。 如果是這樣,我應該如何更改該指令以獲得相同的結果?
您缺少END IF;
第17行的聲明
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;
我不確定為什么會收到該錯誤,但是根本不需要loop
。 只是做這樣的事情:
INSERT INTO Inbox(Mittente, Destinatario, Oggetto, Contenuto, Data)
SELECT @cod, CodiceStudente, 'Nuova news', '', CURDATE()
FROM Listastudenticorsi
WHERE CodiceCorso IN (SELECT CodiceCorso
FROM Listanews
WHERE CodiceNews IN (SELECT MAX(Codice) FROM News));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.