使用: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处理程序永远不会触发,即使我向其中一个坐标的函数发送空白或文本字符串。
答案 0 :(得分:0)
未触发退出处理程序,因为未引发错误。如果您尝试在整数列中插入非整数值,则会触发处理程序。
此外,参数为DECIMAL(10,6)。在调用函数之前会引发任何错误。
您可以将参数作为VARCHAR或CHAR传递,并在需要时自行验证。