将数组传递给MySQL存储例程

我需要将字符串数组作为参数传递给MySQL存储例程。该数组可能很长,其元素数量不是固定的。然后,我想将字符串值放入具有一列的内存表中,以便可以处理数据。我不知道这是否可以在MySQL中完成。也许需要肮脏的解决方法。


例如,我有字符串值:


Banana, Apple, Orange

现在,我想从MySQL Fruits表中获取有关这些水果的数据。伪代码:


create function GetFruits(Array fruitArray) 

   declare @temp table as

      fruitName varchar(100)

   end


   @temp = convert fruitArray to table

   select * from Fruits where Name in (select fruitName from @temp)

end

Microsoft SQL Server允许您使用TEXT数据类型并将数组作为XML字符串提交,从而快速创建内存表。但是,我认为该技术不可能在MySQL中实现。


任何有关如何执行此操作的帮助将不胜感激!


湖上湖
浏览 663回答 4
4回答

蝴蝶不菲

您可以在列表中传递字符串,并使用准备好的语句来运行查询,例如-DELIMITER $$CREATE PROCEDURE GetFruits(IN fruitArray VARCHAR(255))BEGIN  SET @sql = CONCAT('SELECT * FROM Fruits WHERE Name IN (', fruitArray, ')');  PREPARE stmt FROM @sql;  EXECUTE stmt;  DEALLOCATE PREPARE stmt;END$$DELIMITER ;如何使用:SET @fruitArray = '\'apple\',\'banana\'';CALL GetFruits(@fruitArray);

眼眸繁星

只需像这样使用FIND_IN_SET:mysql> SELECT FIND_IN_SET('b','a,b,c,d');        -> 2因此,您可以执行以下操作:select * from Fruits where FIND_IN_SET(fruit, fruitArray) > 0

至尊宝的传说

这有助于我做IN条件,希望这对您有帮助。CREATE  PROCEDURE `test`(IN Array_String VARCHAR(100))BEGIN    SELECT * FROM Table_Name    WHERE FIND_IN_SET(field_name_to_search, Array_String);END//;致电: call test('3,2,1');
打开App,查看更多内容
随时随地看视频慕课网APP