Mysql 使用输出参数调用存储过程

Mysql 使用输出参数调用存储过程,mysql,Mysql,在此,我给出了存储过程“GetAvgOut”: 我试着用 CALL GetAvgOut(@a,'Population','city'); SELECT @a; “select@a”返回null。如何获得分配给out参数“@a”的平均值?我不是mysql专家,但您不需要在任何时候引用out变量并为其赋值吗 例如,如图所示: 嗯 Phil'您没有在select中设置OUT参数 尝试将您的声明更新为: SET @userVar = CONCAT('SELECT AVG( ' , col , ' )

在此,我给出了存储过程“GetAvgOut”:

我试着用

CALL GetAvgOut(@a,'Population','city');
SELECT @a;

“select@a”返回null。如何获得分配给out参数“@a”的平均值?

我不是mysql专家,但您不需要在任何时候引用out变量并为其赋值吗

例如,如图所示:


Phil'

您没有在select中设置OUT参数

尝试将您的声明更新为:

SET @userVar = CONCAT('SELECT AVG( ' , col , ' ) INTO average FROM ' , tbl );

正如@Philip提到的,您需要设置OUT变量的值。将@Josh和@Philip的答案结合起来会得出类似的结果

BEGIN
    SET @userVar = CONCAT(' SELECT AVG( ' , col , ' ) into @average FROM ' , tbl , ' ');
    PREPARE stmt FROM @userVar;
    EXECUTE stmt;
    set average = @average;
END

为什么average声明为int而不是float字段类型?请尝试:调用GetAvgOut(@average,'Population','city');选择@average;谢谢你的回答。当我这么做时,MySQL抛出了“undeclaredvariable:average”错误。但是我在创建过程CREATE DEFINER='mailinmitor'@'127.0.0.1'过程GetAvgOut(OUT average INT,在col VARCHAR(30)中,在tbl VARCHAR(30)中)时读过声明的average
SET @userVar = CONCAT('SELECT AVG( ' , col , ' ) INTO average FROM ' , tbl );
BEGIN
    SET @userVar = CONCAT(' SELECT AVG( ' , col , ' ) into @average FROM ' , tbl , ' ');
    PREPARE stmt FROM @userVar;
    EXECUTE stmt;
    set average = @average;
END