MySQL8和MySQL5.7的区别

mjqavswn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(668)

我有以下功能,可以在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行“”附近要使用的正确语法
有趣的是,我在创建过程时没有这个问题,只是创建了一个函数。

kxxlusnw

kxxlusnw1#

您需要将分隔符定义为除 ; (例如: $$ ). 最后,将分隔符重新定义回 ; :

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、 在mysql中,我对5.7文档和8.0文档中的用户定义函数进行了比较。似乎什么都没变。

相关问题