2017-12-31 143 views
0

1 db 테이블에서 일부 열을 선택해야하는 매우 간단한 저장 프로 시저가 있지만 "일치하지 않음"구문과 관련된 오류가 발생합니다. 여기 내 절차 :일치하는 MySql 저장 프로 시저

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `searchItem`(IN `Importer` VARCHAR(100), IN `Description` TEXT) 
BEGIN 
SELECT model, date_of_production, horsepower, importer, description FROM cars WHERE importer = Importer AND MATCH (description) AGAINST(Description) ORDER BY date_of_production ASC; 
END$$ 
DELIMITER ; 

여기에 내가 절차를 테스트 할 때 내 테이블의 스크린 샷 enter image description here

그것은 나에게 오류 "# 1210 - 잘못된 인수가 일치"를 준다 나는 쿼리를 테스트했습니다 프로 시저가 작동하지 않고 작동하기 때문에 문제 자체가 프로 시저 자체의 sintax에 있다고 추측합니다. 사전에 도움을 주셔서 감사합니다!

답변

0

https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html는 말한다 :

검색 문자열 쿼리 평가시 일정 문자열 값이어야합니다. 예를 들어 테이블 열은 각 행마다 다를 수 있기 때문에이 규칙은 배제됩니다.

이 설명은 AGAINST의 인수로 저장 프로 시저 매개 변수 Description을 사용할 수 없다는 것을 의미합니다.

절차에서 이렇게하려면 PREPARE/EXECUTE를 사용해야합니다. @Michael에서


다시 주석은 :

좋은 지적입니다

, 나는 OP의 테이블 이름이 함수 매개 변수의 이름과 동일 열을 가지고 것으로 나타났습니다하지 않았다. 이것이 모호함을 야기 할 수 있다고 당신 말이 맞습니다.

이 모호성을 피하기 위해 프로 시저와 매개 변수의 매개 변수가 모든 열과 별개의 이름을 갖고 있는지 확인하는 것이 좋습니다.

+1

이것은 'description'/'Description'의 변형 - MATCH (column) AGAINST (program_variable)'이 유효하고 - 변수의 이름과 변수의 이름의 모호함 일 가능성이 높습니다. 문서화 된 제한 사항은 옵티마이 저가 행을 변경할 수 있지만 변수를 실제로 포함 할 수 없다는 것을 알고 있지만 MATCH (열) AGAINST (열)도 MATCH (프로그램 변수) AGAINST (프로그램 변수)도 유효하지 않습니다. , 그리고 거의 확실하게이 후자의 두 가지 방법 중 하나가 해결되고 있다고 생각하지 않습니까? –