这个简单的函数出了什么问题?

时间:2016-09-13 17:20:21

标签: mysql

这是我为练习目的而创建的一个简单函数。但收到给定的错误。

DELIMITER $$

CREATE FUNCTION Weighted_Average(n1 INT, n2 INT, n3 INT, n4 INT)
RETURNS INT
 DETERMINISTIC
 BEGIN
  DECLARE avg INT;
  SET avg = (n1 + n2 + n3*2 + n4*4)/8;
  RETURN avg;
 END;
 DELIMITER $$

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'n4 * 4)/ 8附近使用正确的语法;返回平均值;结束'第6行

我将它与这篇文章进行比较:

MySQL CREATE FUNCTION Syntax

有经验的人可能会指出我的错误而我没有在哪里。我没有看到错误要求我查看的地方有什么问题。注意:我正在使用工作台。

1 个答案:

答案 0 :(得分:0)

你确定你不是指以下,主要是它的底部吗?

DROP FUNCTION IF EXISTS Weighted_Average;
DELIMITER $$
CREATE FUNCTION Weighted_Average(n1 INT, n2 INT, n3 INT, n4 INT)
RETURNS INT
 DETERMINISTIC
 BEGIN
  DECLARE avg INT;
  SET avg = (n1 + n2 + n3*2 + n4*4)/8;
  RETURN avg;
 END;$$
 DELIMITER ;

某些客户端环境需要DELIMITER来描述块的开头和结尾,以及更改语句的行尾。

由于DELIMITER默认为;,我们知道如何使用它来结束sql行,并且从不考虑它。直到...

对于CREATE PROCEDUREFUNCTIONEVENTTRIGGER这样的专业块,需要有一些协议让客户端和服务器知道整体事情结束了。

因此,对于像MySQL Workbench等类似的客户端,我们使用DELIMITER块。我们将其更改为有趣的顶部,代码照常,并按上面所示进行结束。将DELIMITER设置回正常;

PHPMyAdmin不需要它们。对SqlFiddle

而言可能并非如此