Mysql продолжает получать сообщение об ошибке при попытке создать функцию - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь создать 2 функции MySQL Я нашел здесь , я покажу более короткую:

CREATE FUNCTION levenshtein_ratio( s1 VARCHAR(255), s2 VARCHAR(255) ) 
  RETURNS INT 
  DETERMINISTIC 
  BEGIN 
    DECLARE s1_len, s2_len, max_len INT; 
    SET s1_len = LENGTH(s1), s2_len = LENGTH(s2); 
    IF s1_len > s2_len THEN  
      SET max_len = s1_len;  
    ELSE  
      SET max_len = s2_len;  
    END IF; 
    RETURN ROUND((1 - LEVENSHTEIN(s1, s2) / max_len) * 100); 
  END;

Они оба продолжают выдавать мне одну и ту же ошибку:

# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 5

Строка 5 для другой функции выглядит следующим образом:

DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;

Я посмотрел Ошибка 1064 и нашел это:

Ошибка: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)

Сообщение:% s рядом с "% s" в строке% d

Я не знаю, что это значит.

Я не могу понять, что вызывает ошибку?

1 Ответ

3 голосов
/ 19 июля 2011

Поскольку вы используете точки с запятой в теле функции, вам необходимо указать другой разделитель для создания функции.

delimiter //
CREATE FUNCTION levenshtein_ratio( s1 VARCHAR(255), s2 VARCHAR(255) ) 
  RETURNS INT 
  DETERMINISTIC 
  BEGIN 
    DECLARE s1_len, s2_len, max_len INT; 
    SET s1_len = LENGTH(s1), s2_len = LENGTH(s2); 
    IF s1_len > s2_len THEN  
      SET max_len = s1_len;  
    ELSE  
      SET max_len = s2_len;  
    END IF; 
    RETURN ROUND((1 - LEVENSHTEIN(s1, s2) / max_len) * 100); 
  END//
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...