为什么这个mysql函数会保持返回零值?

时间:2012-03-28 06:42:28

标签: mysql function

所以这是代码

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;

它保持返回null值。当我返回w1,w2或qd时,它返回0值。怎么了 ? 谢谢。

3 个答案:

答案 0 :(得分:1)

您将w1w2qd变量声明为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;

答案 1 :(得分:1)

尝试以这种方式重写您的功能 -

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,它们不应与字段名称相同。

答案 2 :(得分:1)

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