2016-05-20 12 views
0
DELIMITER $$ 
CREATE FUNCTION `monthtargetbyuser`(`userId` BIGINT,month VARCHAR(11),year VARCHAR(11)) RETURNS int(11) 

BEGIN 

    DECLARE target,da BIGINT; 
    set da = year-month; 

    SET target = (SELECT ifnull(user_target.monthly_target,0) as monthly_target from user_target left join users on users.id=user_target.user_id where date_format(users.doj,'%Y-%m') <= 'da' and user_target.year=year and year(users.doj)>0 and users.locked !=1 and users.id =userId); 


    RETURN target; 
END 

Bei der Ausführung der in der Funktion angegebenen MySQL-Abfrage wird ein leeres Ergebnis oder null Zeilen zurückgegeben. Während der Ausführung der gespeicherten Funktion wird jedoch ein inkorrektes Ergebnis ausgegeben, d. H. Es wird ein Wert zurückgegeben. Wie überprüfe ich, ob die MySQL-Funktion ein leeres Ergebnis zurückgibt?Wie überprüft man, warum eine gespeicherte MySQL-Funktion ein leeres Ergebnis liefert?

Antwort

0

Einige intelligente Person wird wahrscheinlich eine bessere Antwort geben, aber was für mich funktionierte war eine Überprüfung am Ende der Funktion, um zu sehen, ob die Variable null war und wenn es dann auf einen Wert wie Unbekannt gesetzt wurde . Auf diese Weise erhalten Sie immer einen Wert, der von der Funktion zurückgegeben wird, auch wenn keine Zeilen von Ihrer Abfrage zurückgegeben werden, z. B .:

SET target = (SELECT ifnull(user_target.monthly_target,0) as monthly_target from user_target left join users on users.id=user_target.user_id where date_format(users.doj,'%Y-%m') <= 'da' and user_target.year=year and year(users.doj)>0 and users.locked !=1 and users.id =userId); 

    IF (target IS NULL) THEN 
     SET target = "Unknown"; 
    END IF; 

    RETURN target; 
Verwandte Themen