我有一个非常简单的存储过程,应该从 1 个数据库表中选择一些列,但我收到与“MATCH AGAINST”语法相关的错误。这是我的程序:
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 ;
当我测试该过程时,它给了我一个错误“#1210 - MATCH 的参数不正确”我已经测试了该过程中的查询并且它有效,所以我猜测问题出在该过程的语法中本身。感谢您提前的帮助!
最佳答案
https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html说:
The search string must be a string value that is constant during query evaluation. This rules out, for example, a table column because that can differ for each row.
我读到此内容是说您不能使用存储过程参数 Description
作为 AGAINST
的参数。
因此您必须使用 PREPARE/EXECUTE 在过程中执行此操作。
<小时/>回复@Michael 的评论:
这是一个好点,我没有注意到OP的表有一列的名称与函数参数的名称相同。你是对的,这可能会引起歧义。
确保过程和参数的参数与任何列具有不同的名称始终是一个好主意,以避免这种歧义。
关于MySql 存储过程与匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045342/