2009-12-03 5 views
1

이 빠른 방법으로 해결할 수 있기를 바랍니다.MySQL 작성 실패 프로 시저 오류

USE my_db; 

DELIMITER $$ 
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT) 
BEGIN 
    SELECT DISTINCT `suburb`, `postcode` 
    FROM `location` 
    WHERE `suburb` LIKE '%argQuery%' 
    OR `postcode` LIKE 'argQuery%' 
    LIMIT argLimit 
    ; 
END 
$$ 
DELIMITER ; 

이것은 출력 :

여기 내 .SQL 파일입니다

ERROR 1064 (42000) at line 4: 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 'argLimit 
    ; 
END' at line 8 

그래서 내 매개 변수 argLimit을 좋아하지 나타납니다,하지만 그 이유를 작동 할 수 없습니다. 나는 어리석은 짓을하고있을거야.

MySQL 5.0.51을 사용하고 있습니다.

감사합니다.

답변

4

LIMIT은 상수 여야하며 MySQL의 프로 시저 또는 함수 내에서 매개 변수화 할 수 없습니다. 그러나 PREPARE ... EXECUTE ... USING 구문을 사용하여이 문제를 해결할 수 있습니다.

은 다음과 같이 다소 찾고 끝낼 수 있습니다 :

... 
SET @qry= argQuery; 
SET @lmt= argLimit; 

PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?'; 
EXECUTE stmt USING @qry, @qry, @lmt; 
DEALLOCATE PREPARE stmt; 
+0

+1 진단 및 문제 해결을 위해. MySQL 버그 입력 # 11918에서는 이러한 특성에 대해 설명합니다. – pilcrow

+0

여기에 토론이 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/select.html 으로 표시된 페이지의 절반 정도에 대한 의견 중 하나에 게시 됨 Marc Grue 님이 2006 년 6 월 24 일에 10 : 44am. 나는 코멘트에 직접 링크하는 방법을 모른다. –

+0

간결한 답변과 해결책을 제공해 주셔서 감사합니다. 치료를해라. –