【发布时间】:2015-12-09 17:52:41
【问题描述】:
使用:MySQL 5.6.15
我遇到了一个问题,即退出处理程序没有在 MySQL 函数上触发。我不确定它是否与这里讨论的问题有关:MySQL exit handler ignored
我有以下代码,它采用 2 个 LAT/LON 对并找到点之间的距离。我想捕捉任何不是小数的东西(错误 1366)并简单地传回一个空白字符串。
CREATE DEFINER=`myself`@`%` FUNCTION `DIST_BETWEEN_COORDS`(`lat1` DECIMAL(10,6), `lon1` DECIMAL(10,6), `lat2` DECIMAL(10,6), `lon2` DECIMAL(10,6))
RETURNS varchar(50) CHARSET utf8 COLLATE utf8_unicode_ci
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Find the distance between 2 sets of coordinates'
BEGIN
DECLARE op VARCHAR(50);
DECLARE EXIT HANDLER FOR 1366
BEGIN
RETURN '';
END;
SET @R := 6371; #Radius of the earth in km
SET @dLat := RADIANS(lat2-lat1);
SET @dLon := RADIANS(lon2-lon1);
SET @a := SIN(@dLat/2) * SIN(@dLat/2) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * SIN(@dLon/2) * SIN(@dLon/2);
SET @c := 2 * ATAN2(SQRT(@a), SQRT(1-@a));
SET @d := (@R * @c) * 1000; #Distance in meters
SET @df := @d * 3.28084; #Distance in feet
IF @df >= 1320 THEN
SET @dm := @df/5280; #Distance in miles
SET op = CONCAT(ROUND(@dm,2), " miles");
ELSE
SET op = CONCAT(ROUND(@df,2), " feet");
END IF;
RETURN op;
END
函数本身运行良好,但 EXIT 处理程序永远不会触发,即使我将空白或文本字符串发送到函数以获取其中一个坐标。
【问题讨论】:
标签: mysql error-handling