MySQL:我想将一个数组传递给一个函数,看它迭代遍历数组的每个元素

时间:2015-11-27 04:01:20

标签: 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数据库中查找相应的值来操作,然后吐出一个数组。输入数组中每个值的相应小数 - 换句话说,一个数组输入,另一个数组输出。

我认为我正确地实例化了一切,但我不断收到以下错误:

  

错误代码:1305。FUNCTION applications.Iteration不存在

例如,我有变量AAA, BBB, CCC等,它们是库存清单代码。我想将这些变量的数组传递给过程/函数,然后继续返回一个数组。在这种情况下,它将是1.7, 1.3, and 1.8

我有几个问题:

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

1 个答案:

答案 0 :(得分:1)

首先,我们需要确定您对SQL查询实际需要的逻辑。您希望获取MAX列的ValueFrom值,但仅适用于输入数组中包含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);