Почему эта функция mysql продолжает возвращать нулевое значение? - PullRequest
2 голосов
/ 28 марта 2012

так что это код

CREATE FUNCTION smc()   RETURNS FLOAT
  DETERMINISTIC
   BEGIN
DECLARE w1 FLOAT;
DECLARE w2 FLOAT;
DECLARE qd FLOAT;
DECLARE hasil FLOAT;

SET w1      = "SELECT TRUNCATE(SQRT(SUM((w1*w1))),2) FROM tb_term";
SET w2      =   "SELECT TRUNCATE(SQRT(SUM((w2*w2))),2) FROM tb_term";
SET qd      =   "SELECT TRUNCATE(SUM(w1*w2),2) FROM tb_term";
SET hasil   =   (qd/(w1*w2));   
RETURN hasil; END;

он возвращает нулевое значение. когда я возвращаю w1, w2 или qd, возвращается 0. в чем дело ? спасибо раньше.

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Попробуйте переписать вашу функцию следующим образом -

CREATE FUNCTION smc()
RETURNS FLOAT
DETERMINISTIC
BEGIN
  DECLARE w1    FLOAT;
  DECLARE w2    FLOAT;
  DECLARE qd    FLOAT;
  DECLARE hasil FLOAT;

  SELECT truncate(sqrt(sum((w1 * w1))), 2) INTO w1 FROM tb_term;
  SELECT truncate(sqrt(sum((w2 * w2))), 2) INTO w2 FROM tb_term;
  SELECT truncate(sum(w1 * w2), 2) INTO qd FROM tb_term;
  SET hasil = (qd / (w1 * w2));
  RETURN hasil;
END

И переименуйте объявленные переменные w1, w2, они не должны совпадать с именами полей.

1 голос
/ 28 марта 2012

Оператор Set не присваивает результат запроса переменной.В этом случае он просто назначает строку запроса.Вы можете сделать это с помощью оператора SELECT INTO .

SELECT 
     TRUNCATE(SQRT(SUM((w1*w1))),2),
     TRUNCATE(SQRT(SUM((w2*w2))),2),
     TRUNCATE(SUM(w1*w2),2)  
INTO w1, w2, qd 
FROM tb_term
1 голос
/ 28 марта 2012

Вы объявляете переменные w1, w2 и qd как FLOAT, но вы присваиваете им строки;В результате вы получаете 0.0 во всех трех.Затем вы присваиваете 0.0/0.0 hasil, а деление на ноль дает NULL.

Я думаю, что вы ищете

SELECT TRUNCATE(SQRT(SUM((w1*w1))),2) into w1 FROM tb_term;
SELECT TRUNCATE(SQRT(SUM((w2*w2))),2) into w2 FROM tb_term;
SELECT TRUNCATE(SUM(w1*w2),2) into qd FROM tb_term;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...