2012-03-28 95 views
2

所以这是代码为什么这个mysql函数保持返回零值?

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值。怎么了 ? 以前感谢。

回答

1

您正在声明您的w1,w2qd变量为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; 
+0

这个工作的罚款:) 相当发人深省 – 2012-03-28 06:59:29

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,他们不应该是一样的场名。

+0

这个工作很好,谢谢:)我会改的变量名 – 2012-03-28 07:00:07

1

设置语句不会将查询结果分配给变量。在这种情况下,它只是分配查询字符串。您可以通过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 
+0

感谢,现在工作的罚款:) – 2012-03-28 07:00:34

+0

@ user1297348你看到的更新?您可以在* one *单个查询中执行此操作。 – 2012-03-28 07:07:25

+0

是的。不知道它可以通过这种方式键入。再次感谢 :) – 2012-03-28 14:36:13