Domanda

Ho una funzione memorizzata 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

Abbastanza semplice, accetta un ID, una data di inizio e una data di fine e restituisce il conteggio degli accessi per quell'intervallo di date. Ogni volta che lo eseguo ricevo uno 0 indietro. A meno che non abbia rimosso la sezione relativa alla data della clausola where. Quindi restituisce un numero effettivo. OPPURE se inserisco manualmente le date nella funzione memorizzata, funziona ... Quindi non è un problema di date, ma solo quando sto fornendo le date attraverso l'elenco dei parametri non gli piace.

Qualche idea su cosa potrebbe causare questo? Il fatto che posso semplicemente inserire manualmente le date nella funzione memorizzata e funziona mi infastidisce. Non è che stiano accadendo molte cose qui che potrebbero rovinare, quindi sono un po 'perso come cosa provare dopo.

Inoltre, esiste un modo per eseguire il debug di funzioni / procedure memorizzate. Sto solo recuperando uno 0, ma c'è un modo per debug di questo per cercare di capire cosa potrebbe succedere?

È stato utile?

Soluzione

La mia prima ipotesi è che stai fornendo date in un formato che MySQL non riconosce. MySQL è piuttosto esigente riguardo al formato dei letterali della data. Vuole AAAA-MM-GG, AA-MM-GG, AAAAMMGG o AAAMMGG (puoi anche usare qualsiasi altro carattere di punteggiatura al posto dei trattini). Vedi I tipi DATETIME, DATE e TIMESTAMP per maggiori dettagli .

Puoi anche convertire più formati di data nel formato accettato da MySQL con STR_TO_DATE () funzione.

Per quanto riguarda il debug delle stored procedure e delle funzioni memorizzate, è sempre possibile impostare una variabile definita dall'utente con il prefisso @ e questa variabile diventa disponibile a livello globale dopo il ritorno della funzione memorizzata. Come un effetto collaterale. Quindi è possibile utilizzarlo per impostare le informazioni di diagnostica durante l'esecuzione della funzione memorizzata, quindi controllarle in seguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top