基本上,我会在学生注册/放弃课程的任何时候运行此程序。
我正在尝试在课程中设置student_total =#的学生,然后使用(student_total + 1)更新相应的部分,我无法找到存储过程的良好文档。我的Declare student_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
答案 0 :(得分:2)
DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在任何其他语句之前的开头。
因此,您应该在DECLARE...
语句之前移动SET @section_id...
语句。
您正在尝试使用无效的snytax为变量选择值!您应该使用SELECT ... INTO
而不是SET ... = SELECT ...
(这是无效的语法)。
无需将参数(section_ID
)分配给全局变量(@section_ID
)。您只需更改参数名称即可避免名称与section.section_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 ;
答案 1 :(得分:0)
您正在使用命令行工具,是吗?
了解您收到的错误消息会有所帮助但是基于您发布的代码我看不到您在BEGIN ... END块之后重置分隔符命令的位置。
取自http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html