2012-05-02 8 views
0

우리 회사의 MySQL 서버에 새로운 저장 프로 시저를 추가해야합니다. 약간 다른 점 때문에 이미 존재하는 것을 사용하고 추가 필드를 추가하고 프로 시저의 이름을 변경했습니다. MySQL의 저장 프로 시저와 관련된 이상한 문제

Error Code: 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 '' at line 3 

이 줄에 0 참고로하는 것에 : SET의 @update_id : 이상한 일이 지금은 문을 실행하고자 할 때, 그것은 반환이다 = 0; 이상하게 만드는 것은 SHOW CREATE PROCEDURE를 사용하여 저장 프로 시저를 쿼리했다는 것입니다. Google 데이터베이스에 저장되었으며 정상적으로 작동합니다. 난 그냥 새 저장 프로 시저로 사용하지 않을 수 있습니다 (만약 내가 그것을 새 테스트 데이터베이스에 적용하려고하거나 기존 데이터베이스에서 새 이름을 부여하여 사용) 상관없이. 나는 인터넷에서 해결책을 찾았다. 불행히도 아무 소용이 없습니다. 필자는 원래의 변경되지 않은 저장 프로 시저를 실행하려고 시도한 새로운 테이블과 일부 데모 값을 사용하여 새 데이터베이스를 설정하기까지했습니다. 그것은 똑같은 오류를 반환합니다.

은 여기 현재 사용하고 내가 이야기하고있는 저장 프로 시저를 사용 : 나는 무엇이 잘못 생각에서 완전히 나처럼 너희들이 나를 도울 수 있기를 바랍니다

CREATE DEFINER=`root`@`localhost` PROCEDURE `customer_getcard`(IN Iinstance INT, IN Itimebuy DOUBLE, IN Iprice DECIMAL(10,2), IN Itariff INT, IN Icomment VARCHAR(128)) 
BEGIN 
    SET @update_id := 0; 
    UPDATE customer_shop SET state = 1, id = (SELECT @update_id := id), instance=Iinstance, timebuy=Itimebuy, price=Iprice, comment=Icomment WHERE tariff=Itariff AND state = 0 LIMIT 1; 
    SELECT * FROM customer_shop WHERE id = @update_id; 
END 

. :/

감사합니다, 마크

+0

전체 오류주십시오! – Namphibian

+0

여기 있습니다 : 오류 코드 : 1064. SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 찾아서 'at 3'근처에서 사용하십시오. –

답변

1

당신은 MySQL이 현재 CREATE PROCEDURE 명령은 그것이 BEGIN 후하지만 이전의 같은 구문 오류가 될 것이다 처음 ;가합니다 (0 후, 3 행에) 발생에서 종료 생각으로, 다른 명령 구분 기호를 정의해야 해당 해당 END :

DELIMITER ;; -- or anything else you like 

CREATE PROCEDURE 
    ... 
END;;  -- use the new delimiter you chose above here 

DELIMITER ; -- reset to normal 
+0

그걸 해결해 .. 많은 많은 감사. :) –

-1

MySQL을 저장 프로 시저를 사용하지 않는 "="값 할당을 위해, 그냥 "="를 사용합니다.

또한 "id = (SELECT @update_id : = id)"는 허용되지 않습니다.

CREATE DEFINER=`root`@`localhost` PROCEDURE `customer_getcard`(IN Iinstance INT, IN Itimebuy DOUBLE, IN Iprice DECIMAL(10,2), IN Itariff INT, IN Icomment VARCHAR(128)) 
BEGIN 
    select id into @update_id from customer_shop WHERE tariff=Itariff AND state = 0 LIMIT 1; 
    UPDATE customer_shop SET state = 1, instance=Iinstance, timebuy=Itimebuy, price=Iprice, comment=Icomment where id = @update_id; 
    SELECT * FROM customer_shop WHERE id = @update_id; 
END 

또한 경우에 오류 처리기를 넣어 할 수 있습니다 편집 할 일치하는 행이 없다 : 여기 (안된) 대안 솔루션입니다.

+0

이미 시도해 보았습니다. 작동하지 않습니다. 하지만 내가 말했듯이 위의 게시 된 저장 프로시 저는 서버에 저장되어 정상적으로 작동합니다. 어쩌면 이전 mysql로 ​​끝났을지도 모르겠다. 그래도 스크립트를 사용해 보았지만 같은 오류를 반환합니다. 이번에는 "LIMIT 1"의 1이 강조 표시됩니다. :/ –

+0

나는 고치다 =) –

관련 문제