Разница между MySQL 8 и MySQL 5.7 - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть следующая функция, и я могу создать ее в MySQL v5.7, но я не могу создать ее в MySQL 8 (8.0.13):

CREATE FUNCTION IsRoomAvailable(rid INT,fymd DATE,tymd DATE,bid INT)
  RETURNS BOOL
  READS SQL DATA
BEGIN
  DECLARE bids INT;
  SELECT COUNT(*) INTO bids
    FROM bookings AS b
   WHERE ((b.bstart<tymd AND b.bend>=fymd) OR (b.bstart<=fymd AND b.bend>tymd))
     AND b.rid=rid
     AND b.bid!=bid;
  RETURN IF(bids>0,FALSE,TRUE);
END

Я получаю следующее сообщение об ошибке: «Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 5"

Интересно то, что у меня нет этой проблемы при создании ПРОЦЕДУРЫ, только при создании ФУНКЦИИ.

1 Ответ

0 голосов
/ 06 ноября 2018

Вам необходимо определить разделитель для чего-то другого, кроме ; (например: $$). В конце переопределите разделитель обратно на ;:

DELIMITER $$
CREATE FUNCTION IsRoomAvailable(rid INT,fymd DATE,tymd DATE,bid INT)
  RETURNS BOOL
  READS SQL DATA
BEGIN
  DECLARE bids INT;
  SELECT COUNT(*) INTO bids
    FROM bookings AS b
   WHERE ((b.bstart<tymd AND b.bend>=fymd) OR (b.bstart<=fymd AND b.bend>tymd))
     AND b.rid=rid
     AND b.bid!=bid;
  RETURN IF(bids>0,FALSE,TRUE);
END $$
DELIMITER ;

P.S. Я провел сравнение между 5.7 Документами и 8.0 Документами для пользовательских функций в MySQL. Кажется, ничего не изменилось.

...