Question

J'ai une fonction stockée dans 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

Pretty basic, prend un identifiant, une date de début et une date de fin et renvoie le nombre de connexions pour cette plage de dates. Chaque fois que je le lance, je reçois un 0. À moins que je supprime la section date de la clause where. Ensuite, il renvoie le nombre réel. OU si je mets simplement les dates dans la fonction stockée, cela fonctionne ... Ce n'est donc pas un problème de dates, mais seulement lorsque je fournis les dates via la liste de paramètres, cela ne lui plaît pas.

Avez-vous une idée de ce qui provoquerait cela? Le fait que je puisse simplement mettre manuellement les dates dans la fonction stockée et que cela fonctionne me gêne vraiment. Ce n’est pas comme si beaucoup de choses se passaient ici qui risquaient de s’égarer, alors je suis un peu perdu.

De plus, existe-t-il un moyen de déboguer les fonctions / procédures stockées? Je viens de recevoir un 0, mais est-il possible pour moi de résoudre ce problème pour essayer de comprendre ce qui pourrait se passer?

Était-ce utile?

La solution

Ma première hypothèse est que vous fournissez des dates dans un format non reconnu par MySQL. MySQL est assez pointilleux sur le format des littéraux de date. Il veut AAAA-MM-JJ, AA-MM-JJ, AAAAMMMJJ ou AAAAMMJJ (vous pouvez également utiliser tout autre caractère de ponctuation à la place des tirets). Voir les types DATETIME, DATE et TIMESTAMP pour plus de détails. .

Vous pouvez également convertir plusieurs formats de date au format accepté par MySQL avec les STR_TO_DATE () function.

En ce qui concerne le débogage des procédures stockées et des fonctions stockées, vous pouvez toujours définir une variable définie par l'utilisateur avec le préfixe @ . Cette variable devient globalement disponible après le retour de la fonction stockée. Comme un effet secondaire. Vous pouvez donc l'utiliser pour définir les informations de diagnostic lors de l'exécution de votre fonction enregistrée, puis vérifiez-la par la suite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top