到目前为止,我有以下代码:
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
。
我有几个问题:
答案 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);