一尘不染

将数组传递给MySQL存储例程

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中实现。

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


阅读 259

收藏
2020-05-17

共1个答案

一尘不染

您可以在列表中传递字符串,并使用准备好的语句来运行查询,例如-

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);
2020-05-17