MySQL存储过程;“声明”不是有效的“声明”;
我正在尝试建立一个存储过程,将1添加到任务下载中,并从用户积分中减去1 我最好的猜测是:MySQL存储过程;“声明”不是有效的“声明”;,mysql,stored-procedures,Mysql,Stored Procedures,我正在尝试建立一个存储过程,将1添加到任务下载中,并从用户积分中减去1 我最好的猜测是: CREATE DEFINER=`Library`@`localhost` PROCEDURE `download`( IN p_assignmentId INT(11), IN p_userId INT(11) ) BEGIN DECLARE p_credit INT unsigned DEFAULT 1; DECLARE p_downloads IN
CREATE DEFINER=`Library`@`localhost` PROCEDURE `download`(
IN p_assignmentId INT(11),
IN p_userId INT(11)
)
BEGIN
DECLARE p_credit INT unsigned DEFAULT 1;
DECLARE p_downloads INT unsigned DEFAULT 1;
SELECT credit
INTO p_credit
FROM Users
WHERE userId = p_userId;
SELECT downloads
INTO p_downloads
FROM Assignments
WHERE assignmentId = p_assignmentId;
UPDATE Users
SET credit = p_credit - 1
WHERE userId = p_userId;
UPDATE Assignments
SET downloads = p_downloads +1
WHERE assignmentId = p_assignmentId;
END
它抱怨我的declare语句需要分号,而事实似乎并非如此,因此任何猜测?MySQL存储过程和函数通常需要分隔符重写,以防止它们自己的body语句过早终止它们的CREATE语句;这通常是通过这种模板实现的:
DELIMITER $$
CREATE ...
BEGIN
[stmt];
[stmt2];
....
END$$
DELIMITER ;
是否在创建之前更改了分隔符<代码>分隔符$$CREATE。。。开始。。。结束$$分隔符是常用的方法。我刚刚为Clary编辑过,这就是我所有的。好的,当我通过单击“创建新过程”而不是在查询中进行创建时,它起作用了。如果您使用的是MySQL Workbench,您可以在树状图中右键单击存储过程以查看完整的创建(带分隔符更改)。