MySQL CREATE FUNCTION 在 END IF 上中断

Posted

技术标签:

【中文标题】MySQL CREATE FUNCTION 在 END IF 上中断【英文标题】:MySQL CREATE FUNCTION breaking on END IF 【发布时间】:2013-05-12 14:07:22 【问题描述】:

我正在尝试创建一个函数来计算两个纬度/经度点之间的距离;但是,CREATE FUNCTION 在函数体的END IF; 部分中断(通过删除IF/ELSE/END 块确认)。

有什么想法吗?我想保留 M / KM 的差异,以免在应用程序中添加计算。

DELIMITER $$

CREATE FUNCTION HAVERSINE
    (
        from_latitude DECIMAL(30, 15),
        from_longitude DECIMAL(30, 15),
        to_latitude DECIMAL(30, 15),
        to_longitude DECIMAL(30, 15),
        unit VARCHAR(20)
    )
    RETURNS DECIMAL(30, 15)
    DETERMINISTIC
    BEGIN
        DECLARE radius DECIMAL(30, 5);
        DECLARE distance DECIMAL(30, 15);

        IF(unit = 'MILES') THEN SET radius = '3959';
        ELSE IF(unit = 'KILOMETRES' OR unit = 'KM') THEN SET radius = '6371.3929';
        ELSE SET radius = '3959';
        END IF;

        SET distance = (
            radius * 
            ACOS(
                COS(RADIANS(from_latitude)) * 
                COS(RADIANS(to_latitude)) * 
                COS(RADIANS(to_longitude) - RADIANS(from_longitude)) + 
                SIN(RADIANS(from_latitude)) * 
                SIN(RADIANS(to_latitide))
            )
        );

        RETURN distance;
    END

【问题讨论】:

【参考方案1】:

您可能忘记在末尾添加分隔符,并切换回标准分隔符:

用以下代码替换最后一行:

END$$
DELIMITER ;

【讨论】:

【参考方案2】:

我刚刚注意到 ELSE 和 IF 之间的空格。我的错。删除那些,它的工作原理。

【讨论】:

以上是关于MySQL CREATE FUNCTION 在 END IF 上中断的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7 create VIEW or FUNCTION or PROCEDURE

mysql安装问题mysqld: Can‘t create directory ‘E: oftmysqlmysql-5.7.19-winx64data‘ 两种解决办法

mysql 安装问题二:mysqld: Can't create directory 'E:Softwaremysql-5.7.24-winx64data' (Errc(示例代

MySQL--函数

使用 php 代码调用 MYSQL CREATE VIEW?

在 Laravel 4 迁移中创建 MYSQL FUNCTION