2014-03-05 5 views
0

mysql에서 최적화 된 levenshtein 함수를 만들려고합니다.MySQL 최적화 Levenshtein

"#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 
'@differences, @lenRight, @lenLeft, @leftIndex, @rightIndex, @compareLength INT;' 
at line 5" 

코드 : : 내 오류를 찾을 수없는, 내 콘솔은 저에게이를 반환

/****** Script Date: 06/10/2009 09:36:44 ******/ 

DELIMITER $$ 

CREATE DEFINER=`root`@`%` FUNCTION `optmizedlevenshtein`(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS int(11) 
    DETERMINISTIC 
BEGIN 
   DECLARE @differences, @lenRight, @lenLeft, @leftIndex, @rightIndex, @compareLength INT;  
    DECLARE @left_char, @right_char CHAR(1); 

    SET @lenLeft = LEN(s1); 
   SET @lenRight = LEN(s2); 
   SET @differences = 0; 
  
   If @lenLeft = 0 
   BEGIN 
      SET @differences = @lenRight GOTO done; 
   END 
   If @lenRight = 0 
   BEGIN 
      SET @differences = @lenLeft; 
      GOTO done; 
   END  
   GOTO comparison;  
  
   comparison: 
   IF (@lenLeft >= @lenRight) 
      SET @compareLength = @lenLeft; 
   Else 
      SET @compareLength = @lenRight;  
   SET @rightIndex = 1; 
   SET @leftIndex = 1; 
   WHILE @leftIndex <= @compareLength 
   BEGIN 
      SET @left_char = substring(s1, @leftIndex, 1); 
      SET @right_char = substring(s2, @rightIndex, 1); 
      IF @left_char <> @right_char 
      BEGIN -- Would an insertion make them re-align? 
         IF(@left_char = substring(s2, @rightIndex+1, 1))    
            SET @rightIndex = @rightIndex + 1; 
         -- Would an deletion make them re-align? 
         ELSE 
            IF(substring(s1, @leftIndex+1, 1) = @right_char) 
               SET @leftIndex = @leftIndex + 1; 
               SET @differences = @differences + 1; 
      END 
      SET @leftIndex = @leftIndex + 1; 
      SET @rightIndex = @rightIndex + 1; 
   END  
   GOTO done;  
  
   done: 
      RETURN @differences; 
END$$ 

DELIMITER ; 

답변

1

우선,이 모든 MySQL을로 표시되지 않습니다. MySQL에는 GOTO이 없습니다.

함수/저장 프로 시저에서 변수 이름 앞에 @이 필요하지 않습니다. 당신은 사용할 수 있습니다 : How to add levenshtein function in mysql?

행운을 빕니다 :

DECLARE differences, lenRight, lenLeft, leftIndex, rightIndex, compareLength INT; 
DECLARE left_char, right_char CHAR(1); 

어쨌든, 여기에 상자에서 꺼내 자마자 바로 사용할 수있는 뭔가!

+0

사실 SQL Server 스크립트를 번역 해 주셔서 감사합니다. 그것을 고칠 수있는 방법을 보여줄 수 있습니까? 나는 당신이 나를 보내는이 기능을 사용하고 있었지만 너무 느리다. –