レーベンシュタイン距離を計算するためのMySQL関数を作成しようとしています。必要なものにかなり近い関数を見つけましたが、どこでもエラーが発生し続けます。MySQL関数は初めてなので、何が問題なのかわかりません。
関数は次のとおりです。
DELIMITER $$
CREATE FUNCTION LEVENSHTEIN( s1 CHAR(255), s2 CHAR(255))
RETURNS int(3)
DETERMINISTIC
BEGIN
DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;
DECLARE s1_char CHAR(255);
DECLARE cv0, cv1 CHAR(255);
SET s1_len = LENGTH(s1);
SET s2_len = LENGTH(s2);
SET cv1 = 0x00;
SET j = 1;
SET i = 1;
SET c = 0;
IF s1 = s2 THEN
RETURN 0;
ELSE IF s1_len = 0 THEN
RETURN s2_len;
ELSE IF s2_len = 0 THEN
RETURN s1_len;
ELSE
WHILE j <= s2_len DO
SET c = c + 1;
IF s1_char = SUBSTRING(s2, j, 1) THEN
SET cost = 0; ELSE SET cost = 1;
END IF;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1;
IF c > c_temp THEN
SET c = c_temp;
END IF;
SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;
END WHILE;
SET cv1 = cv0, i = i + 1;
END WHILE;
END IF;
RETURN c;
END$$
DELIMITER ;
そしてここにエラーがあります(これまでのところ)。
#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 'WHILE; END IF; RETURN c; END' at line 36
編集:元のコードはここにあります