到目前为止,我有以下代码:
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. 是,我是否正确地将数组传递给了函数?
- 为什么会出现此错误?
最佳答案
首先,我们需要确定您实际需要的 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/