2012-03-28 10 views
2

so ist dies der CodeWarum gibt diese mysql-Funktion immer Null zurück?

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; 

es return null Wert halten. wenn ich w1, w2 oder qd zurückgebe, gibt es 0 zurück. Was ist los mit dir ? danke vorher.

Antwort

1

Sie deklarieren Ihre w1, w2 und qd Variablen als FLOAT, aber Sie ordnen ihnen Zeichenfolgen zu; Das Ergebnis ist, dass Sie 0,0 in allen dreien erhalten. Dann weisen Sie 0.0/0.0 zu hasil zu und das Teilen durch Null gibt Ihnen einen NULL.

Ich glaube, Sie suchen

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

dies funktioniert gut :) sehr aufschlussreich –

1

Versuchen Sie, Ihre Funktion auf diese Weise neu zu schreiben -

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 

Und deklarierten Variablen w1 umbenennen, w2, sie sollten nicht das gleiche wie Feld sein Namen.

+0

diese Arbeit gut, danke :) ich werde –

1

Die Set-Anweisung weist der Variablen kein Abfrageergebnis zu. In diesem Fall wird nur die Abfragezeichenfolge zugewiesen. Sie können dies durch SELECT INTO Anweisung tun.

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

Variablennamen dank ändern, fein jetzt arbeitet :) –

+0

@ user1297348 Sie das Update Sehen? Sie können es in * einer * einzigen Abfrage tun. –

+0

ja. Weiß nicht, kann es auf diese Weise schreiben. Danke noch einmal :) –

Verwandte Themen