mysql存储过程

vuv7lop3  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(475)

我有一个非常简单的存储过程,它应该从1db表中选择一些列,但是我得到了一个与“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 ;

这是我table的截图

当我测试这个过程时,它会给我一个错误“#1210-要匹配的参数不正确”我已经测试了这个过程之外的查询,它可以工作,所以我猜问题出在这个过程本身的sintax中。提前谢谢你的帮助!

kxeu7u2r

kxeu7u2r1#

https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html 说:
搜索字符串必须是在查询求值期间保持不变的字符串值。例如,这排除了表列的可能性,因为每行的表列可能不同。
我读这篇文章是想说您不能使用存储过程参数 Description 作为 AGAINST .
因此,您必须在过程中使用prepare/execute来执行此操作。
@michael回复:
这是一个很好的观点,我没有注意到op的表中有一列的名称与函数参数的名称相同。你说得对,这很可能会引起歧义。
最好确保过程和参数的参数与任何列的名称不同,以避免这种歧义。

相关问题