MySQL不接受循环结束指令

标签 mysql loops triggers

我正在尝试在插入事件之后创建一个触发器;这是触发器的定义:

 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/

相关文章:

Mysql:前缀索引与索引

mysql - 比较字符串与大量记录的相似度

C# 一次绘制对象而不是使用循环

postgresql - 触发器,在插入之前初始化一个值(PostgreSQL)

javascript jquery 创建和监听事件

MySQL触发器: Check if primary key ID is in use in other table

php - 为以下四个表编写连接查询,如果满足某个条件则获取记录

MySQL:如何在从另一个表获取的每个间隔之间从一个表中选择行

c - 为什么永远不会到达断点?

Javascript 帮我做这个,这样它就干了