MySQL存储过程故障
基本上,每当学生注册/放弃课程时,我都会运行这个过程。 我试图设置一门课程中的学生总数=,然后用(学生总数+1)更新相应的部分。我很难找到好的存储过程文档。我的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
声明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 ;