我需要为名为 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;