2012-08-01 2 views
4

저장 그들이 어떻게 시작하는지. 내 함수는 문자열 (사용자 입력에서)을 가져온 다음 데이터베이스에서 분류를 검색하여 해당 문자열의 분류를 알려줍니다. LIKE 쿼리와 약간 비슷하지만 역순을 제외하고는 전체 문자열을 포함하는 사용자 입력이고 데이터베이스에는 검색 할 문자열이 포함되어 있습니다. 희망은 그것이 의미가 있습니다!오류 선언 정수 변수 나는 MySQL의 새로운 저장 기능 (5.5.13 Server 버전)를 선언 할 때 오류가납니다 기능

PHP에서 이것을 작성/개발 했으므로 개념과 논리가 훌륭하게 작동하고 아름답게 작동하지만 저장된 함수로 변환하려고하면 MySQL에서 오류가 발생합니다. 함수의 코드는 다음과 같습니다 내가 노력에 장난을 많이 수행하고 내가 잘못거야 곳 해결 한

#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 
'DECLARE mystringlength INT; SET mystringlength = LENGTH(mystring); 
DECLARE segm' at line 10 

:

delimiter $ 

DROP FUNCTION IF EXISTS get_string_class$ 
CREATE FUNCTION get_string_class(mystring VARCHAR(15)) 

RETURNS VARCHAR(15) 
READS SQL DATA 
BEGIN 

DECLARE i INT; 
SET i = 2; 

DECLARE mystringlength INT; 
SET mystringlength = LENGTH(mystring); 

DECLARE segment VARCHAR(15); 
DECLARE String_Class VARCHAR(15); 
SET String_Class = NULL; 

WHILE i <= mystringlength DO 

    SET segment = LEFT(mystring, i); 

    SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment); 

    IF SELECT FOUND_ROWS() = 1 THEN 
     RETURN String_Class 
    END IF; 

    i = i + 1; 

END WHILE; 

RETURN String_Class; 

END$ 
delimiter ; 

는이 오류를 받고 있어요. 나는 그것을 테스트하기 위해 루프를 모두 제거했지만 여전히 동일한 오류가 발생합니다. 누구든지 내가 INT 변수를 선언하는 곳에서 잘못한 것을 알고 있습니까? 믿기지 않을 정도로 기본적인 것입니다 ...!

대단히 감사드립니다. 그 중

하나입니다 - - 모든 선언은 BEGIN ... END를 절의 시작에 있어야합니다

답변

6

일부 구문 오류가 발생했습니다. 저장 프로 시저 내부

DELIMITER $ 

DROP FUNCTION IF EXISTS get_string_class$ 
CREATE FUNCTION get_string_class(mystring VARCHAR(15)) 

RETURNS VARCHAR(15) 
READS SQL DATA 
BEGIN 

DECLARE i INT; 
DECLARE segment VARCHAR(15); 
DECLARE String_Class VARCHAR(15); 
DECLARE mystringlength INT; 

SET i = 2; 
SET mystringlength = LENGTH(mystring); 
SET String_Class = NULL; 

WHILE i <= mystringlength DO 

    SET segment = LEFT(mystring, i); 

    SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment); 

    IF (SELECT FOUND_ROWS()) = 1 THEN 
     RETURN String_Class; 
    END IF; 

    SET i = i + 1; 

END WHILE; 

RETURN String_Class; 

END$ 
DELIMITER ; 
+0

대단히 감사합니다. 포인터 : –

4

DECLARE 부분은 그 후 시작 상단과 SET 및 기타 statemnts에 있어야합니다.

+1

고맙습니다. 매일 새로운 것을 배우십시오 :) –