Невозможно вызвать хранимую процедуру. Код ошибки 1305 - PullRequest
0 голосов
/ 19 октября 2019

База данных о расписании экзаменов, и это основная хранимая процедура, которая касается планирования курсов на определенную дату. Я создал процедуру, но когда я пытаюсь вызвать ее, она говорит, что процедура не найдена.

Я просмотрел код, но не могу найти синтаксические ошибки, сама процедура не имеет ошибок компиляции, (ноэто может быть потому, что я должен использовать разделители?)

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 не существует

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

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 ;
0 голосов
/ 19 октября 2019

кажется, у вас нет конца (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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...