+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Function mysql out of sync

  1. #1
    bia
    bia non è in linea Novello
    Post
    9

    Function mysql out of sync

    Salve
    Sto cercando di fare una funzione che mi ritorna latitudine e longitudine del viaggio precedente per poi calcolare la distanza in km. tra i due pjnti.
    Questa la funzione:

    codice:
    DELIMITER $$
    CREATE FUNCTION `READ_PREV_TRIP`
    (lk_vehicle VARCHAR(15), lk_id INTEGER, lk_date DATETIME, 
    lk_what_field  VARCHAR(30))
    RETURN FLOAT
    BEGIN    
       DECLARE ws_prev_lat      FLOAT;
       DECLARE ws_prev_lng      FLOAT;
       DECLARE ws_prev_id       FLOAT;
    BEGIN
       DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
       SET ws_prev_lat      := '';
       SET ws_prev_lng      := '';
       SET ws_prev_id       := '';
    END;
    BEGIN
      SET ws_prev_lat      := '';
      SET ws_prev_lng      := '';
      SET ws_prev_id       := '';
    
    BEGIN
      select `ID`,
             `LAT`,
             `LNG`
        into ws_prev_id,
             ws_prev_lng,
             ws_lon_prec
        from `positions` f1
       where `vehicle` = lk_veichle
         and (str_to_date(`date_time`,'%Y-%m-%d %H:%i:%s') = 
        (select max(str_to_date(`date_time`,'%Y-%m-%d %H:%i:%s'))
                              from `positions` f2
                              where f2.`vehicle` = f1.`vehicle`
                              and str_to_date
     (f2.`date_time`,'%Y-%m-%d %H:%i:%s') 
     < str_to_date(lk_data,'%Y-%m-%d %H:%i:%s')
                              or f2.`id` < lk_id));
    
    
      IF lk_what_field = 'ID' THEN
         RETURN ws_prev_id;
      END IF;
    
      IF lk_what_field = 'PREV_LAT' THEN
      RETURN ws_prev_lat;
       END IF;
    
     IF lk_what_field = 'PREV_LNG' THEN
      RETURN ws_prev_lng;
    END IF;
    
    END;
    END;
    END
    Richiamo poi la funzione per creare una vista che mi restituisce l'errore of sync. Cosa sto sbagliando?
    Ultima modifica di AntonioG; 04-04-2016 17:39  Motivo: Tag CODE

  2. #2
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scolaretto
    Post
    446
    - Sei sicuro che servano tutti quei BEGIN (con conseguenti END) ?
    - Sull'ultimo END manca il ; - è corretto?
    - Dichiari DELIMITER $$ : sei sicuro che ti serva ? Se sì dove lo usi ?
    - Perché dichiari le variabili (i.e. ws_prev_lat) di tipo FLOAT e poi le assegni il valore '' (peraltro effettui 2 volte l' assegnazione)?
    - Sei sicuro che MySQL supporti la sintassi 'select ... INTO ....' Link to MySQL Reference Manual?

    Prova a controllare quanto evidenziato ...... e poi facci sapere

  3. #3
    bia
    bia non è in linea Novello
    Post
    9
    La funzione lavora correttamente se lascio nella function la scelta del viaggio precedente considerando solo il campo id (togliendo quindi il parametro lk_data e lasciando nella where solo id < lk_id).... il problema nasce nel momento in cui ho modificato la funzione andando ad inserire di scegliere il viaggio precedente utilizzando prima il campo datetime e poi il campo id . Il problema risulta essere quindi il formato dei campi data inseriti nella function.... aiutoooooooo!!!!!!

  4. #4
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scolaretto
    Post
    446
    Link to MySQL STR_TO_DATE

    Hai dei campi sul DB che hai chiamato date-time ? Se sì : che formato hanno (datetime oppure stringa) ? Se no magari quello è un errore.

    Magari la tua funzione restituisce dei dati però, dichiarare le variabili in modo corretto e assegnare i valori nel modi corretto sicuramente non guasta.
    Quindi ti invito a riverificare bene il tuo codice ....

  5. #5
    bia
    bia non è in linea Novello
    Post
    9
    si, ti confermo che il campo date_time è di tipo DATETIME

  6. #6
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scolaretto
    Post
    446
    Quote Originariamente inviato da bia Visualizza il messaggio
    si, ti confermo che il campo date_time è di tipo DATETIME
    Quindi che necessità hai di convertire dei campi datetime in datetime ? Hai visto che il primo parametro della funzione STR_TO_DATE è di tipo stringa ?

  7. #7
    bia
    bia non è in linea Novello
    Post
    9
    ho provato anche senza usare str_to_date e non funziona comunque

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi