2011-09-08 3 views
1

다음과 같은 문제점이 있습니다.저장된 함수를 생성 할 수 없습니다 - 구문이 잘못 되었습니까?

CREATE FUNCTION `id2sku`(`entity_id_in` INT) 
    RETURNS VARCHAR 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    DECLARE returnvalue varchar(50); 

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1; 

    return returnvalue; 
END 

이제 내 문제는 내가 다음과 같은 메시지가 쿼리를 해고하는 경우 :

내가 해당 SKU 여기

내로 ENTITY_ID 변환 저장 기능을 만들려는 코드입니다 [창 제목] 오류

SQL Error (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 'LANGUAGE SQL 
NOT DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT' at line 3 

DB를 이용하여 IM은 MySQL의 5.0.51a

012 인

미리 감사드립니다.

답변

7

MySQL은 구분 기호로 ;을 사용하기 때문에 라인 9에서 ;을 발견 한 경우 :

DECLARE returnvalue varchar(50); 

MySQL은 명령이 종료 생각 - 그것을 실행하려고 :

CREATE FUNCTION `id2sku`(`entity_id_in` INT) 
    RETURNS VARCHAR(50) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    DECLARE returnvalue varchar(50); 

은 유효한 SQL이 아닙니다.

설정 새로운 구분 기호 :

DELIMITER $$ 

CREATE FUNCTION `id2sku`(`entity_id_in` INT) 
    RETURNS VARCHAR(50) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    DECLARE returnvalue varchar(50); 

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1; 

    return returnvalue; 
END 
$$ 

당신은 그때와 구분 기호를 변경할 수 있습니다

DELIMITER ; 
+0

감사합니다 - 잘 작동했습니다 :) 또한 설명해 주셔서 감사합니다. – trampi

2

이 작동합니다 :

DELIMITER $$ 

CREATE FUNCTION `id2sku`(`entity_id_in` INT) 
    RETURNS VARCHAR(50) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    DECLARE returnvalue VARCHAR(50); 

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1; 

    RETURN returnvalue; 

    END$$ 

DELIMITER ; 

당신은 VARCHAR 길이를 지정하지 않았다. :-) 기본적으로

+0

니스, 난 당신이 매우 가까운 생각합니다. 그래도 다음과 같은 오류가 발생합니다. [Window Title] ... "9 번 줄에서"근처에서 사용할 올바른 구문은 – trampi

+0

입니다. 두 사람 모두 옳았 기 때문에 두 대답을 모두 수락 할 수 있습니다. – trampi

+0

나는 당신의 코드를 복사하여 붙여 넣었지만'mysql.proc에서로드 할 수 없습니다. '오류를 생성했습니다. 테이블이 손상된 것 같습니다 .' 여기서 뭐가 잘못 됐는지 도와주세요. mysql 버전'5.5.30-log'을 사용하고 있습니다. – Bajrang