【问题标题】:Cannot call Stored procedure Error code 1305无法调用存储过程 错误代码 1305
【发布时间】:2019-10-19 12:05:01
【问题描述】:

数据库是关于考试安排的,这是关于在给定日期安排课程的主要存储过程。 我创建了该过程,但是当我尝试调用它时说找不到该过程。

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

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。PROCEDURE cameron.schedule_course 不存在

【问题讨论】:

  • You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MESSAGE TEXT = 'Cannot schedule start date on a weekend'
  • 您的程序中有多个语法错误 - 所以它不应该编译。

标签: mysql database stored-procedures


【解决方案1】:

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

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 ;

【讨论】:

    【解决方案2】:

    看来你还没有结束(END $$)

    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 ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2016-11-28
      • 2014-04-20
      • 2020-02-13
      相关资源
      最近更新 更多