Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程;“声明”不是有效的“声明”;_Mysql_Stored Procedures - Fatal编程技术网

MySQL存储过程;“声明”不是有效的“声明”;

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

我正在尝试建立一个存储过程,将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 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,您可以在树状图中右键单击存储过程以查看完整的创建(带分隔符更改)。