2009-07-15 132 views
0

。由此我给存储过程 “GetAvgOut”:调用存储过程的输出参数

delimiter // 
DROP PROCEDURE IF EXISTS GetAvgOut// 
CREATE DEFINER = 'MailIntimator'@'127.0.0.1' PROCEDURE GetAvgOut(OUT average INT,IN col VARCHAR(30),IN tbl VARCHAR(30)) 
READS SQL DATA 
COMMENT 'returns average' 
BEGIN 
SET @userVar = CONCAT(' SELECT AVG(' , col , ') FROM ' , tbl); 
PREPARE stmt FROM @userVar; 
EXECUTE stmt; 
END; 
// 
delimiter ; 

我打过电话使用aforeseen程序,

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

“选择@a” 返回null。我怎样才能得到分配给参数“@a”的平均值?

+0

为什么average声明为int,而不是float字段类型? – 2009-07-15 08:18:31

+0

尝试: CALL GetAvgOut(@ average,'Population','city'); SELECT @average; – 2009-07-15 08:20:25

回答

1

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

例如作为上看到http://dev.mysql.com/doc/refman/5.0/en/call.html

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT) 
BEGIN 
    # Set value of OUT parameter 
    SELECT VERSION() INTO ver_param; 
    # Increment value of INOUT parameter 
    SET incr_param = incr_param + 1; 
END; 

HTH

菲尔

1

你不设置您的选择OUT参数。

尝试更新声明:

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

正如@Philip提到的,你需要设置输出变量的值。结合@Josh's和@ Philip的答案给出了类似这样的东西

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