当前位置: 首页 > 面试题库 >

将数组传递给MySQL存储例程

薄鸿远
2023-03-14
问题内容

我需要将字符串数组作为参数传递给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中实现。

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


问题答案:

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

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);


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : PHP-将PDO与IN子句数组一起使用 (8个答案) 5年前关闭。 我目前有一个值数组(business_id) 可以说 使用这些值中的每一个从数据库中获取每个business_id的关联行信息的最佳方法是什么。 可以一一查询是我的问题。显然,你可以做 问题答案: 通常的SQL注入警告仍然适用,您可能需要先循环遍历id以进行验证或转义。另外,如果希望使用

  • 问题内容: 我在形成文字时可能做错了。假设我有一个简单的存储过程,如下所示: 的定义为: 执行这样的查询: 产生以下结果集: 代替: 我的文字是否有问题,还是应该以其他方式访问该字段?感谢您的任何建议。 问题答案: 指定输入的方式看起来不错,因为使用行和数组构造器语法可以观察到相同的行为: 和: 产生: 如果添加: 在循环内部,输出为: 表明您实际上正在获取一个元组,其中“ message”是您期

  • 问题内容: 我正在创建一些存储过程来管理我的数据库。特别是,我想创建一个存储过程来编辑特定行的一列,但是我想通过将列名作为参数传递来做到这一点。 那就是我想做的 使用该参数,我找到了要编辑的特定行,并且我想使用该参数来仅编辑我想要的列。 正如我在其他主题上所读到的那样,我已经尝试使用或定义局部变量,但没有找到解决方案。 有什么帮助吗? 问题答案: 您将需要使用 动态SQL : 请注意,正如Paul

  • 我正在从Spring中调用一个存储过程,但是我需要向存储过程传递一个字符串数组。然而,到目前为止,我遇到了一个又一个错误。你知道哪里出了问题吗? 我尝试运行以下测试。 这是我得到的stacktrace。

  • 问题内容: 我在烧瓶中有一个称为数组的函数,该函数接收一个列表并打印出列表中的项目: 在客户端,我想将名为str的javascript数组传递给该数组。我该怎么办?这就是我现在所拥有的,但是Flask没有读取添加的变量。有任何想法吗? 问题答案: Flask具有一个称为request的内置对象。在请求中有一个称为args的multidict。 您可以用来检索查询字符串的值。 当然,这需要一个get

  • 问题内容: 我想将两个数组形式的java发送到oracle存储过程。第一个数组是字符串数组,第二个是字符数组,我怎样才能做到这一点? 问题答案: 这是一个如何做的例子。 以下脚本在数据库中设置表,类型和存储过程。该过程采用数组类型的参数,并将数组的每一行插入表中: 然后,Java代码演示如何将数组传递到此存储过程中: 如果先运行SQL脚本,然后运行Java类,然后查询表,则应该发现所有数据都已插入