вызов хранимой процедуры с выходным параметром - PullRequest
0 голосов
/ 15 июля 2009

При этом я дал хранимую процедуру «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 ;

Я пытался вызвать вышеуказанную процедуру, используя,

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

"select @a" возвращает ноль. Как я могу получить среднее значение, присвоенное выходному параметру "@a"?

Ответы [ 3 ]

1 голос
/ 15 июля 2009

Вы не устанавливаете параметр OUT в своем выборе.

попробуйте обновить ваше заявление:

SET @userVar = CONCAT('SELECT AVG( ' , col , ' ) INTO average FROM ' , tbl );
1 голос
/ 15 июля 2009

Я не эксперт по 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;

НТН

Phil '

0 голосов
/ 19 мая 2014

Как упоминалось в @Philip, вам нужно установить значение переменной OUT. Сочетание ответа @ Джоша и @ Филиппа дает что-то вроде этого

BEGIN
    SET @userVar = CONCAT(' SELECT AVG( ' , col , ' ) into @average FROM ' , tbl , ' ');
    PREPARE stmt FROM @userVar;
    EXECUTE stmt;
    set average = @average;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...