首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法调用存储过程错误代码1305

无法调用存储过程错误代码1305
EN

Stack Overflow用户
提问于 2019-10-19 12:05:01
回答 2查看 285关注 0票数 0

数据库是关于考试调度的,这是一个主要的存储过程,它是关于在给定日期上安排课程的。我创建了这个过程,但是当我试图调用它时,表示没有找到该过程。

我查看了代码,但找不到语法错误,过程本身没有编译错误(但这可能是因为我必须使用分隔符吗?)

代码语言:javascript
复制
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 (DAYOFWEEK(in_date) = 6 OR 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 complete THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE TEXT = 'Something something'
END IF;

INSERT INTO SESSION (`code`, `date`, room)
VALUES
(module_code, in_date, NULL)

LEAVE mainloop;
END LOOP;
DELIMITER ;

CALL schedule_course(WSD, CURDATE())

错误代码: 1305。过程cameron.schedule_course不存在

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-19 12:22:33

Mysql 8显示了许多错误。我纠正了它们,逻辑是合理的,但你当然要检查一下,

代码语言:javascript
复制
DELIMITER $$
CREATE DEFINER=`root`@`localhost`  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 (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 complete THEN
      SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Something something';
    END IF;

   INSERT INTO SESSION (`code`, `date`, room)
   VALUES
    (module_code, in_date, NULL);

  LEAVE mainloop;
  END LOOP;
  CLOSE module_c;
END;
DELIMITER ;
票数 0
EN

Stack Overflow用户

发布于 2019-10-19 12:18:51

似乎你没有终点(END $$)

代码语言:javascript
复制
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 (DAYOFWEEK(in_date) = 6 OR 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 complete THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE TEXT = 'Something something'
END IF;

INSERT INTO SESSION (`code`, `date`, room)
VALUES
(module_code, in_date, NULL)

LEAVE mainloop;
END LOOP;

END $$

DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58463499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档