MySQL存储过程报错:DECLARE位置无效,期望END的问题求助
问题解决:MySQL存储过程DECLARE语法错误
错误根源:MySQL明确规定,存储过程的
BEGIN块内,所有DECLARE声明(变量、游标、处理程序等)必须放在所有执行语句的最前面,不能在声明中间插入SET这类执行语句。你现在在第一个变量声明后写了SET,之后又继续声明游标和变量,这直接违反了语法规则,才会触发报错。修复后的代码:
DELIMITER $$ CREATE PROCEDURE course_schedulings(IN input_course_code CHAR(3), IN scheduling_date DATE) BEGIN -- 所有DECLARE声明移到最顶部 DECLARE session_code CHAR(3); DECLARE scheduling_cursor CURSOR FOR SELECT `date` FROM `session` WHERE `code` = input_course_code; DECLARE complete BOOLEAN DEFAULT FALSE; -- 执行语句统一放在声明之后 SET session_code = (SELECT `code` FROM module WHERE module.course_code = input_course_code); -- 后续可添加游标操作逻辑,比如OPEN、FETCH、CLOSE等 END $$ DELIMITER ;
- 额外提醒:如果
SELECT code FROM module WHERE course_code = input_course_code返回多行结果,当前的SET语句会报错,建议改用SELECT code INTO session_code FROM module WHERE course_code = input_course_code LIMIT 1;来避免这个问题。
内容的提问来源于stack exchange,提问作者root_10
相关产品推荐
相关产品推荐

