Обработка промежуточных результатов в хранимой процедуре MySQL - PullRequest
1 голос
/ 19 июня 2010

Я пытаюсь немного взвесить мои данные, используя хранимую процедуру.В основном это означает умножение определенных столбцов на соответствующие им веса и их сложение в конце.

Я написал следующую хранимую процедуру:

CREATE PROCEDURE test ()  
BEGIN
DECLARE w1 DOUBLE;
DECLARE w2 DOUBLE;
DECLARE res1 DOUBLE;
DECLARE res2 DOUBLE;
DECLARE finres DOUBLE;
SELECT weight1 INTO w1 FROM weights;
SELECT weight2 INTO w2 FROM weights;
SELECT w1 * var1 INTO res1 FROM vartable;
SELECT w2 * var2 INTO res1 FROM vartable;
SELECT res1+res2 INTO finres;
SELECT MEAN(finres);
END
//

К сожалению, пока это не помогает.В конце он должен вернуть одно значение, но все это работает, только если я поместил все переменные в запрос SELECT.

Ответы [ 4 ]

0 голосов
/ 19 июня 2010

Я понял!Работает следующее:

CREATE PROCEDURE test2 (IN period1 INT)
BEGIN
DECLARE x1 DOUBLE;
DECLARE x2 DOUBLE;
DECLARE param1 DOUBLE; 
SELECT wvalue INTO x1 FROM weights WHERE uid=1;
SELECT wvalue INTO x2 FROM weights WHERE uid=2;

SELECT x1*x2 INTO param1;
INSERT result_table(result,period) SELECT param1,period1;

END
//
DELIMITER ;

call test2 (@la);

Можно ли как-нибудь сохранить этот результат?РЕДАКТИРОВАТЬ: понял, что один тоже.Сохраните его в какой-нибудь существующей таблице, см. Edit.

0 голосов
/ 19 июня 2010

Извините, напутал с моим первым ответом, не понял проблему ....

Вы хотите вычислить СРЕДСТВО по своим весам, умноженным на переменные. Но в вашей процедуре вы только храните дубли. Таким образом, ваши средние вычисления превышают одну двойную. ИМХО в этом нет смысла. Например. СРЕДСТВО 5? : -)

Что написано в ваших таблицах? Только один ряд весов и один ряд переменных?

0 голосов
/ 19 июня 2010

Попробуй так:

SELECT AVG(W.weight1 * V.var1 + W.weight2 * V.var2) FROM weights W, vars V;
0 голосов
/ 19 июня 2010

Согласно MySQL документ вы должны объявить параметр, который вы хотите вывести

Как

CREATE PROCEDURE simpleproc (OUT param1 INT)

сохранить значение в param1 и вызвать процедуру с помощью:

CALL simpleproc(@a);

и получите значение с помощью:

SELECT @a;

Это должно сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...