Pregunta

Tengo una función almacenada en 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

Bastante básico, toma una identificación, una fecha de inicio y una fecha de finalización y devuelve el recuento de inicios de sesión para ese rango de fechas. Cada vez que lo ejecuto me devuelve un 0. A menos que elimine la sección de fecha de la cláusula where. Luego devuelve el número real. O si solo pongo manualmente las fechas en la función almacenada, funciona ... Por lo tanto, no es un problema de fechas, pero solo cuando proporciono las fechas a través de la lista de parámetros no me gusta.

¿Alguna idea de qué podría causar que esto suceda? El hecho de que pueda poner manualmente las fechas en la función almacenada y funciona realmente me molesta. No es que estén sucediendo muchas cosas aquí que podrían estropear, así que estoy un poco perdido como qué probar a continuación.

Además, ¿hay alguna forma de depurar funciones / procedimientos almacenados? Acabo de recuperar un 0, pero ¿hay alguna forma de depurar esto para tratar de descubrir qué podría estar pasando?

¿Fue útil?

Solución

Mi primera suposición es que está proporcionando fechas en un formato que MySQL no reconoce. MySQL es bastante exigente con el formato de los literales de fecha. Quiere YYYY-MM-DD, YY-MM-DD, YYYYMMDD o YYMMDD (también puede usar cualquier otro carácter de puntuación en lugar de los guiones). Consulte los tipos DATETIME, DATE y TIMESTAMP para obtener más detalles. .

También puede convertir más formatos de fecha al formato aceptado por MySQL con el función STR_TO_DATE () .

Con respecto a la depuración de procedimientos almacenados y funciones almacenadas, siempre puede establecer una variable definida por el usuario con el prefijo @ , y esta variable estará disponible globalmente después de que regrese la función almacenada. Como un efecto secundario. Por lo tanto, puede usar esto para configurar la información de diagnóstico mientras ejecuta su función almacenada y luego verificarla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top