2013-03-08 2 views
3

문자열의 단어 첫 글자를 대문자로 사용하는이 함수를 찾았지만 PHPMyadmin에서 SQL로 실행하려고하면 구문 오류가 발생합니다. 문제가 무엇인지 정리할 수 있습니까? 여기 코드입니다 :CAP_FIRST 함수가 구문 오류를 제공합니다

CREATE FUNCTION CAP_FIRST (input VARCHAR(255)) 

RETURNS VARCHAR(255) 

DETERMINISTIC 

BEGIN 
DECLARE len INT; 
DECLARE i INT; 

SET len = CHAR_LENGTH(input); 
SET input = LOWER(input); 
SET i = 0; 

WHILE (i < len) DO 
    IF (MID(input,i,1) = ' ' OR i = 0) THEN 
     IF (i < len) THEN 
      SET input = CONCAT(
       LEFT(input,i), 
       UPPER(MID(input,i + 1,1)), 
       RIGHT(input,len - i - 1) 
      ); 
     END IF; 
    END IF; 
    SET i = i + 1; 
END WHILE; 

RETURN input; 
END; 

그리고 이것은 오류입니다 : MySQL은 말했다 : 문서 # 1064 - 당신은 당신의 SQL 구문에 오류가 있습니다; MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문이 8 행에서 '근처에서 사용하도록하십시오.

+0

구분 기호를 정의 했습니까? –

+0

나는 코드를 여기에 집어 들었다. http://joezack.com/2008/10/20/mysql-capitalize-function/ 그리고 나는이 모든 것에 매우 익숙하다. 구분 기호를 정의하는 방법을 모르겠습니다. – Spud

+0

@ SPUD (위)와 함께이 기능을 저장하는 데 문제가있는 사람은 솔루션이므로이 내용을 확인하십시오. http://stackoverflow.com/questions/15300902/cap-first-function-gives -syntax-error –

답변

6

구분 기호는 DB 엔진에 문장의 끝을 알려줍니다. 일반적으로 ;입니다. 하지만 그럴 경우 첫 번째 ;에 저장 프로 시저가 끝납니다. 그리고 그것의 정의는 불완전 할 것이다.

구분 기호를 변경하고 프로 시저 끝 부분에 추가 할 수 있습니다. 변경 한 후 구분 문자를 다시 변경하면 ;

delimiter | 
CREATE FUNCTION CAP_FIRST (input VARCHAR(255)) 
... 
END; 
| 
delimiter ; 
+1

매력처럼 작동했습니다! 고마워. 귀하의 도움에 감사 드리며이 사이트에 대해 감사드립니다. 나는 여기서 많은 것을 배웠고 당신은 단지 나의 (아주 제한된) 지식에 덧붙였다. 건배. – Spud

관련 문제