错误1064在触发器内声明变量

时间:2017-04-16 23:08:34

标签: mysql sql

我在触发器中声明变量时遇到了问题。

SET DELIMITER ;;
BEGIN
DECLARE qtyNow INT;
SET qtyNow = (
    SELECT qty
    FROM warehouse
    WHERE bin_id = 'GA66'
);
DECLARE need INT;
SET need = (
    SELECT min_level
    FROM warehouse
    WHERE bin_id = 'GA66'
);
END;;
SET DELIMITER ;

我收到错误#1064,这意味着非法语法。我不明白我哪里出错了。我甚至删除了所有那些,只是

DECLARE qtyNow INT;

此单行仍会弹出错误。

1 个答案:

答案 0 :(得分:2)

我看到两个问题。

一,你有一个BEGIN ... END块,但你没有声明触发器。

commit bf65060说:

  

BEGIN ... END语法用于编写复合语句,它可以出现在存储的程序(存储过程和函数,触发器和事件)中。

您不能将BEGIN ... END用作裸声明。它必须是CREATE TRIGGER,CREATE PROCEDURE,CREATE FUNCTION或CREATE EVENT的一部分。

二,你的块中有两个DECLARE语句,其间有一个SET。

Git bash-completion with filename support?说:

  

DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在任何其他语句之前的开头。

您在完成另一个语句SET之后尝试使用第二个DECLARE。事先做好所有的DECLARE。