MySQL存储过程故障

MySQL存储过程故障,mysql,stored-procedures,Mysql,Stored Procedures,基本上,每当学生注册/放弃课程时,我都会运行这个过程。 我试图设置一门课程中的学生总数=,然后用(学生总数+1)更新相应的部分。我很难找到好的存储过程文档。我的声明student\u total int时出错行。我在做什么不对 DELIMITER $$ CREATE PROCEDURE `mydb`.`update_seats` (IN section_ID varchar(20)) BEGIN SET @section_id=section_id; DECLARE student_tot

基本上,每当学生注册/放弃课程时,我都会运行这个过程。 我试图设置一门课程中的学生总数=,然后用(学生总数+1)更新相应的部分。我很难找到好的存储过程文档。我的
声明student\u total int时出错行。我在做什么不对

DELIMITER $$

CREATE PROCEDURE `mydb`.`update_seats` (IN section_ID varchar(20))
BEGIN

SET @section_id=section_id;

DECLARE student_total int;
-- count the number of students in the course --

SET student_total = SELECT count(student_ID) from course
WHERE section_ID = @section_id;


Update Section SET students_enrolled = (student_total + 1) 
WHERE section_ID = @section_id;




END

您正在使用命令行工具,是吗

了解您收到的错误消息会很有帮助,但根据您发布的代码,我看不出您在BEGIN…END块之后在何处重置分隔符命令

取自

问题 错误1 发件人:

仅允许在BEGIN中声明。。。结束复合语句,并且必须在其开始处,在任何其他语句之前

因此,您应该将
DECLARE…
语句移动到
SET@section\u id…
语句之前

错误2 您试图使用无效的snytax将值选择到变量中!您应该使用
选择。。。进入
而不是
设置…=选择…
(这是无效语法)

消除冗余 无需将参数(
section\u ID
)分配给全局变量(
@section\u ID
)。您只需更改参数名称,即可避免与
section.section\u ID
列的名称冲突

解决方案
很清楚的例子,我也喜欢你的语法,会给这个一个尝试,谢谢!
DELIMITER ;;

CREATE PROCEDURE `update_seats` (IN p_section_ID VARCHAR(20))
BEGIN
    DECLARE student_total INT;

    SELECT  count(student_ID)
    INTO    student_total
    FROM    course
    WHERE   section_ID = p_section_ID;

    UPDATE  section
    SET     students_enrolled = (student_total + 1)
    WHERE   section_ID = p_section_ID;
END;;

DELIMITER ;