Pergunta

Eu tenho uma função armazenada em 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, tem um id, data de início e uma data final e retorna a contagem de logins para esse intervalo de datas. Sempre que eu executá-lo eu recebo um 0 para trás. A menos que eu removi a seção da data da cláusula onde. Em seguida, ele retorna a um número real. Ou se eu apenas colocar manualmente as datas na função armazenada funciona ... Então não é uma questão de datas, mas só quando eu estou fornecendo as datas através da lista de parâmetros que não gosta.

Todos os pensamentos sobre o que faria com que isso aconteça? O fato de que eu posso simplesmente colocar manualmente as datas na função armazenados e funciona realmente me incomoda. Não é como muita coisa está acontecendo aqui que poderia atrapalhar isso estou meio perdido como que a próxima tentativa.

Além disso, existe uma maneira de depuração armazenadas funções / procedimentos. Eu estou apenas começando a 0 para trás, mas há uma maneira para me depurar isso para tentar descobrir o que pode estar acontecendo?

Foi útil?

Solução

Meu primeiro palpite é que você está fornecendo datas em um formato que o MySQL não reconhece. MySQL é bastante exigente sobre o formato de literais de data. Ele quer AAAA-MM-DD, YY-MM-DD, AAAAMMDD, ou AAMMDD (você também pode usar qualquer outro caractere de pontuação no lugar dos traços). Consulte O DATETIME, data e tipos TIMESTAMP para mais detalhes .

Você também pode converter mais formatos de data para o formato MySQL aceita com o STR_TO_DATE () função .

Em relação depuração de procedimentos armazenados e funções armazenadas, você sempre pode definir uma variável definida pelo usuário com o prefixo @, e esta variável se torna globalmente disponível após o retorno de função armazenados. Como um efeito colateral. Assim você pode usar este para se ajustar informações de diagnóstico durante a execução de sua função armazenada, e, em seguida, verificá-la depois.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top