在 mysql 中创建函数不起作用 - 错误 1064

Posted

技术标签:

【中文标题】在 mysql 中创建函数不起作用 - 错误 1064【英文标题】:Creating functions in mysql doesnt work - Error 1064 【发布时间】:2011-04-19 08:48:21 【问题描述】:

我通过 phpMyAdmin 尝试了这个示例 http://www.databasejournal.com/features/mysql/article.php/3569846/MySQL-Stored-Functions.htm

mysql> DELIMITER |
mysql>
 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 |

下一个语句给出:

Error

SQL query:

CREATE FUNCTION WEIGHTED_AVERAGE(
n1 INT,
n2 INT,
n3 INT,
n4 INT
) RETURNS INT DETERMINISTIC BEGIN DECLARE avg INT;

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5 

【问题讨论】:

您使用的是哪个 MySQL 版本?我会说是 phpAdmin 出错了,因为它可以从命令行客户端运行 您好-您的解决方案有效-从命令行很好。想要将其添加为答案? 【参考方案1】:

正如链接中提到的:

As mentioned in the first stored procedures tutorial, we declare the "|" symbol as a delimiter, so that our function body can use ordinary ";" characters

你可以在不同的连续行上写很多命令。但通常只有在满足';'时才会执行hole语句。 放置一个 DELIMITER 字符意味着无论你是否使用 ';',MySQL 都应该等到它关闭,然后才解释分隔符之间的内容。

【讨论】:

以上是关于在 mysql 中创建函数不起作用 - 错误 1064的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 RegisterController 中创建函数在 laravel 中不起作用

如何在 JavaScript 中创建自定义错误?

在类中创建一个向量,然后在函数中使用类对象不起作用

在服务实现中创建 System.Windows.Control 时,WCF 服务不起作用

在useEffect中创建一个异步函数,并在函数的while循环中使用await,似乎不起作用

为啥直接在构造函数中创建 ES6 类的实例时 Jest 的 toThrow 不起作用?