MySQL:我想将数组传递给函数并查看它遍历数组的每个元素

标签 mysql arrays

到目前为止,我有以下代码:

delimiter //
CREATE FUNCTION Iteration(InputArray CHAR) 
RETURNS DECIMAL
BEGIN
    RETURN 
    SELECT Max(IF(Stock = InputArray, ValueFrom, NULL)) AS Stock FROM DatabaseName.TableName LIMIT 1;
END 

delimiter ;

SET @Stocks = (SELECT ColumnName FROM DatabaseName.TableName LIMIT 1);
SELECT Iteration(@Stocks)FROM DatabaseName.TableName;

我感兴趣的是将一个数组传递给 Iteration 函数,然后通过在 DatabaseName 数据库中查找相应的值来对其进行操作,为输入数组中的每个值吐出对应的小数——换句话说,一个数组输入,另一个数组输出。

我认为我正确地实例化了所有内容,但我不断收到以下错误:

Error Code: 1305. FUNCTION applications.Iteration does not exist

例如,我有变量AAA、BBB、CCC等,它们是库存代码。我想将这些变量的数组传递给过程/函数,然后再返回一个数组。在本例中,它将是 1.7、1.3 和 1.8

我有几个问题:

  1. 这是否有意义——也就是说,我可以将数组传递给这样的函数吗?
  2. 如果 1. 是,我是否正确地将数组传递给了函数?
  3. 为什么会出现此错误?

最佳答案

首先,我们需要确定您实际需要的 SQL 查询逻辑。您想要获取 ValueFrom 列的 MAX 值,但仅限于输入数组中包含 Stock 的那些记录。这可以通过执行一个简单的 SELECT 以及一个过滤掉不匹配记录的 WHERE 子句来完成,例如

SELECT ValueFrom
FROM DatabaseName.TableName
WHERE Stock IN ('stock1', 'stock2', 'stock3')

当然,我们需要用输入数组替换股票列表。我会在这里使用存储过程:

CREATE PROCEDURE Iteration(IN inputArray VARCHAR(255))
BEGIN

  SET @sql = CONCAT('SELECT ValueFrom FROM DatabaseName.TableName WHERE Stock IN (', inputArray, ')');
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

END
$$

DELIMITER ;

用法:

SET @inputArray = '\'stock1\',\'stock2\',\'stock3\'';
CALL Iteration(@inputArray);

关于MySQL:我想将数组传递给函数并查看它遍历数组的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33950073/

相关文章:

arrays - Int类型不符合协议(protocol)顺序

javascript - 适合使用 Node js 进行实时聊天的数组或对象

mysql - 计算给定列的条目数

mysql - 打开巨大的mySQL数据库

arrays - 数组中列的矢量化 reshape

android - 具有可绘制值的字符串数组到 int 数组

java - 在数组中存储最低有效位?

php - mysql查询根据最新时间戳获取最小值

php - Laravel:对 View 的查询进行分页 MySQL 错误 1140 Mixing of GROUP columns

php - 使用 php 和 mysql 为简单论坛设计的高效数据库