首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8与MySQL 5.7的差异

MySQL 8与MySQL 5.7的差异
EN

Stack Overflow用户
提问于 2018-11-06 18:38:00
回答 1查看 6.4K关注 0票数 1

我有以下函数,可以在MySQL v5.7中创建它,但不能在MySQL 8(8.0.13)中创建它:

代码语言:javascript
复制
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行附近使用的正确语法。”

有趣的是,在创建过程时,我没有这个问题,只需要创建一个函数。

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 20:14:23

您需要将分隔符定义为;以外的其他内容(例如:$$)。最后,将分隔符重新定义为;

代码语言:javascript
复制
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. I对MySQL中的用户定义函数进行了5.7文件8.0文档的比较。似乎什么都没有改变。

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

https://stackoverflow.com/questions/53177988

复制
相关文章

相似问题

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