Frage

Ich habe eine gespeicherte Funktion in MySQL:

CREATE FUNCTION `login_count`(o INT, start_date DATE, end_date DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE total_count INT;
SELECT COUNT(*) INTO total_count FROM logins as l WHERE `order_id` = o && modified BETWEEN start_date AND end_date; 
RETURN total_count; 
END

Ziemlich einfach, nimmt eine ID, Startdatum und ein Enddatum und gibt die Anzahl der Anmeldungen für diesen Zeitraum. Jedes Mal, wenn ich es laufen erhalte ich eine 0 zurück. Es sei denn, ich entfernte das Datum Abschnitt der Where-Klausel. Dann gibt es die eine tatsächliche Zahl. Oder wenn ich manuell nur die Daten setzen in der gespeicherten Funktion funktioniert es ... Es ist also keine Frage der Daten, aber nur, wenn ich die Daten durch die Parameterliste liefert er es nicht mag.

Alle Gedanken darüber, was verursachen würde dies geschehen? Die Tatsache, dass ich kann einfach manuell die Daten in der gespeicherten Funktion gesetzt und es funktioniert nervt mich wirklich. Es ist nicht so viel passiert hier, dass vermasseln könnte so bin ich irgendwie verloren, wie, was als nächstes zu versuchen.

Auch ist es eine Möglichkeit, gespeicherte Funktionen / Prozeduren zu debuggen. Ich erhalte nur ein 0 zurück, aber gibt es eine Möglichkeit für mich, dies zu debuggen, um zu versuchen und herauszufinden, was passiert sein könnte?

War es hilfreich?

Lösung

Meine erste Vermutung ist, dass Sie Daten in einem Format sind liefern, die MySQL nicht erkennt. MySQL ist ziemlich wählerisch über das Format von Datumsliterale. Sie will YYYY-MM-DD, YY-MM-DD, YYYYMMDD oder YYMMDD (Sie können auch andere Satzzeichen anstelle der Striche verwenden können). Siehe Die DATETIME-, DATE und TIMESTAMP-Typen, um weitere Informationen .

Sie können auch mehrere Datumsformate in das MySQL-akzeptiert-Format mit der STR_TO_DATE () Funktion.

In Bezug auf dem Debuggen von gespeicherten Prozeduren und gespeicherte Funktionen, können Sie immer eine benutzerdefinierte Variable mit dem Präfix @ gesetzt, und diese Variable wird nach der gespeicherten Funktion zurückkehrt global verfügbar. Wie ein Nebeneffekt. So können Sie diese zum Einstellen von Diagnoseinformationen verwenden, während der gespeicherte Funktion ausgeführt wird, und es dann später überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top