mysql 中出现错误--#1064 创建触发器时出错

mysql 中出现错误--#1064 创建触发器时出错

我需要为名为 try 的表创建一个名为的触发器。它将在表中输入某些内容后执行。(我正在使用 phpmyadmin mysql)但我#1064在创建它时出现错误。我的触发器包含

BEGIN
DECLARE aa decimal(4,3);
DECLARE bb decimal(4,3);
DECLARE cc decimal(4,3);
DECLARE cur1 CURSOR FOR SELECT a,b,c FROM site;
OPEN cur1
FETCH NEXT FROM cur1 into aa,bb,cc;
WHILE FETCH_STATUS=0
BEGIN
PRINT aa
END
END

它显示了这样的错误

 MySQL said: #1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'FETCH NEXT FROM cur1 
into aa,bb,cc; WHILE FETCH_STATUS=0 BEGIN PRINT aa END ' at line 7

我是新手,请帮帮我...谢谢

答案1

您不一致地使用分号来分隔命令可能是您的问题(至少是部分问题)。您需要在每个命令的末尾使用一个分号。:)

Open cur1是一个独立命令,;其后面应该有一个(就像您的“Print”语句一样)。

由于不存在,因此 MySQL 会将这两行解释为一个命令:OPEN cur1 FETCH NEXT FROM cur1 into aa,bb,cc;这是一个无效命令。

评论后编辑:

正如您报告的错误所示,您有语法错误。这(仍然)是由于分号使用不当造成的,但您在 While 语句使用方面也有错误。循环While应该有一个do, 并以 结束End While(不需要额外的 Begin/End 块)。

查看 MySQL 帮助:13.6.5.8 WHILE 语法

尝试这个:

BEGIN
    DECLARE aa decimal(4,3);
    DECLARE bb decimal(4,3);
    DECLARE cc decimal(4,3);
    DECLARE cur1 CURSOR FOR SELECT a,b,c FROM site;
    OPEN cur1;
    FETCH NEXT FROM cur1 into aa,bb,cc;
    WHILE FETCH_STATUS=0 DO
        PRINT aa;
    END WHILE;
END;

相关内容