所以这是代码
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值。怎么了 ? 谢谢。
答案 0 :(得分:1)
您将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;
答案 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