Mysql在尝试创建函数时不断出错

时间:2011-07-19 14:49:04

标签: mysql function

我正在尝试创建2个MySQL函数I found here,我将展示较短的函数:

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;

我抬头error 1064找到了这个:

  

错误:1064 SQLSTATE:42000(ER_PARSE_ERROR)

     

消息:%s在%d附近的'%s'附近

我不知道这意味着什么。

我无法弄清楚触发错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

因为您在函数体内使用分号,所以需要为函数的创建指定不同的分隔符。

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//