You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用存储过程报错1305:schedule_course存储过程不存在问题排查求助

解决存储过程schedule_course不存在的问题

你遇到的Error 1305本质是存储过程根本没成功创建——虽然你觉得没有编译错误,但代码里有好几处语法问题,再加分隔符的使用细节没处理到位,导致存储过程创建失败,自然调用时会提示不存在。咱们一步步来修正:

1. 核心语法错误排查(这些是创建失败的关键)

MySQL在创建存储过程时,只要有语法错误就不会生成目标存储过程,你的代码里有这些遗漏:

  • IF语句末尾缺少分号:两处IF ... END IF块都没加结束分号,比如周末判断的逻辑块、FETCH后的判断块
  • SIGNAL语句语法错误:MESSAGE TEXT应该写成MESSAGE_TEXT(下划线不能省略,这是MySQL的固定语法)
  • INSERT语句末尾缺少分号:插入SESSION表的语句没有结束符
  • 调用参数错误:WSD是CHAR类型参数,必须用单引号包裹,否则会被MySQL当成未定义变量处理

2. 分隔符的正确使用细节

你设置了DELIMITER $$,但存储过程定义结束时,必须用$$来标记结束,然后再把分隔符改回;。你的代码里END LOOP;之后直接写DELIMITER ;,导致MySQL无法正确识别存储过程的结束位置,这也是创建失败的原因之一。

修正后的完整代码

DELIMITER $$ 
CREATE PROCEDURE schedule_course(IN in_code CHAR(3), IN in_date DATE) 
BEGIN 
    DECLARE complete BOOLEAN DEFAULT FALSE; 
    DECLARE module_code CHAR(3); 
    DECLARE module_c CURSOR FOR SELECT course_code FROM module WHERE course_code = in_code; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET complete = TRUE; 

    -- 修复:IF语句补充分号,修正MESSAGE_TEXT语法
    IF (DAYOFWEEK(in_date) = 6 OR DAYOFWEEK(in_date) = 7) THEN 
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot schedule start date on a weekend'; 
    END IF; 

    OPEN module_c; 
    mainloop : LOOP 
        FETCH NEXT FROM module_c INTO module_code; 

        -- 修复:IF语句补充分号,修正MESSAGE_TEXT语法
        IF complete THEN 
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No matching course code found'; 
        END IF; 

        -- 修复:INSERT语句补充分号
        INSERT INTO SESSION (`code`, `date`, room) VALUES (module_code, in_date, NULL); 

        LEAVE mainloop; 
    END LOOP mainloop; -- 加上循环标签,语法更规范
END $$ -- 用$$标记存储过程定义结束
DELIMITER ; 

-- 修复:CHAR类型参数添加单引号
CALL schedule_course('WSD', CURDATE()); 

验证步骤

  1. 先执行修正后的存储过程创建代码,确保没有报错
  2. 执行SHOW PROCEDURE STATUS WHERE Db = 'cameron';,确认schedule_course已经存在
  3. 再调用存储过程,就能正常执行了

简单来说,你的存储过程因为语法和分隔符的问题没创建成功,所以调用时提示不存在,修正这些问题后就能解决啦。

内容的提问来源于stack exchange,提问作者Cameron Cheung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:51:49