为了账号安全,请及时绑定邮箱和手机立即绑定

将数组传递给MySQL存储例程

将数组传递给MySQL存储例程

湖上湖 2019-10-08 15:57:27
我需要将字符串数组作为参数传递给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)endMicrosoft SQL Server允许您使用TEXT数据类型并将数组作为XML字符串提交,从而快速创建内存表。但是,我认为该技术不可能在MySQL中实现。任何有关如何执行此操作的帮助将不胜感激!
查看完整描述

4 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超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);


查看完整回答
反对 回复 2019-10-08
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

只需像这样使用FIND_IN_SET:


mysql> SELECT FIND_IN_SET('b','a,b,c,d');

        -> 2

因此,您可以执行以下操作:


select * from Fruits where FIND_IN_SET(fruit, fruitArray) > 0


查看完整回答
反对 回复 2019-10-08
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

这有助于我做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');


查看完整回答
反对 回复 2019-10-08
  • 4 回答
  • 0 关注
  • 662 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信