Mysql 创建存储函数时出现语法错误

Mysql 创建存储函数时出现语法错误,mysql,syntax-error,stored-functions,Mysql,Syntax Error,Stored Functions,我试图在MySQL 5.5.38中编写我的第一个存储函数,但我无法克服一个恼人的语法错误。我已经检查了MySQL文档,但我仍然看不出问题出在哪里,错误消息只是说您的SQL语法有错误;废话废话。。。在第1行 代码如下: DELIMITER $$ CREATE FUNCTION distm (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS DOUBLE NO SQL DETERMINISTIC BEGIN DE

我试图在MySQL 5.5.38中编写我的第一个存储函数,但我无法克服一个恼人的语法错误。我已经检查了MySQL文档,但我仍然看不出问题出在哪里,错误消息只是说
您的SQL语法有错误;废话废话。。。在第1行

代码如下:

DELIMITER $$

CREATE FUNCTION distm (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE)
    RETURNS DOUBLE NO SQL DETERMINISTIC
BEGIN
    DECLARE radius DOUBLE;
    SET radius = 6371008.771415059;

    DECLARE x1, y1, x2, y2, dlat, dlng DOUBLE;
    SET x1 = RADIANS(lng1);
    SET y1 = RADIANS(lat1);
    SET x2 = RADIANS(lng2);
    SET y2 = RADIANS(lat2);
    SET dlng = x2 - x1;
    SET dlat = y2 - y1;

    DECLARE dist DOUBLE;
    SET dist = 2 * radius * ASIN(
        SQRT(
            POW(SIN(dlat / 2), 2)
            + COS(y1) * COS(y2) * POW(SIN(dlng / 2), 2)
        )
    );
    RETURN dist;
END$$

DELIMITER ;
编辑:确切的错误消息如下所示:

SQL Error [1064] [42000]: 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 'DELIMITER $$

CREATE FUNCTION distm (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2' at line 1

尝试删除
分隔符$$
之前的
DROP
语句,然后再次运行

另外,将行
返回DOUBLE NO-SQL-DETERMINISTIC
更改为如下。注意,它不是
无SQL确定性的
而是
非确定性的

RETURNS DOUBLE NOT DETERMINISTIC

如果存在distm,您是否在删除
DROP函数后进行了尝试?它肯定没有说
诸如此类的废话。。如果需要进一步帮助,请发布准确的错误。@Rahul你说得对,我已添加了准确的错误消息。我已从我发布的代码中删除了上述语句。但是文档明确地说它是
无SQL
:再次正确地检查文档。@3k-从您链接到的文档中可以看出:“无SQL表示例程不包含SQL语句。”虽然它只是建议,但我认为您的SP确实包含SQL语句,因此您无论如何都不应该使用该特性。@3k-。。。你说你使用的是MySQL 5.5,而你链接的是5.1版的文档(尽管他们对
无SQL
)说了同样的话。@AndrewMorton是的,我很抱歉。我刚刚发布了第一个搜索结果,因为我赶时间。但是如果
DECLARE
SET
RETURN
等都是SQL语句,那么在MySQL中什么不是SQL语句呢?