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

Function mysql out of sync

  1. #1
    bia
    bia non  in linea Novello
    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:

    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 18:39  Motivo: Tag CODE

  2. #2
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    - 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
    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 Scribacchino
    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
    si, ti confermo che il campo date_time di tipo DATETIME

  6. #6
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    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
    ho provato anche senza usare str_to_date e non funziona comunque

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. API Function
    Da mastrix nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 14-05-2010, 17:40
  2. function
    Da maurogn nel forum Presentati
    Risposte: 1
    Ultimo Post: 19-12-2008, 11:15
  3. Sync di due combo su una struttura a schede
    Da niubbo600 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 12-06-2008, 08:37
  4. Risposte: 1
    Ultimo Post: 24-02-2008, 09:34
  5. [MySQL] Stored Procedure (Function)
    Da bornslippy nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 02-02-2006, 09:52