RDBMS ORACLE – Funzione SecondsSinceFromTimestamp IBM-DS Vs ORACLE

La funzione SecondsSinceFromTimestamp in IBM- DataStage:

 

SecondsSinceFromTimestamp(DATA_INIZIO_EVENTO, DATA_FINE_EVENTO)

 

effettua una differenza tra due timestamp in secondi.

Da documentazione IBM:

In oracle non esiste una funzione che effettua questa differenza, per cui occorre creare una funzione 

custom da richiamare. 

La funzione che è stata creata ha lo stesso nome di quella presente in  IBM-DS.

Da notare che la funzione presente in IBM – Datastage non effettua una differenza non tra END_DATE – START_DATE ma al contrario effettua una differenza tra la START_DATE – END_DATE per cui se consideriamo la differenza di un giorno tra start ed end avremo come risultato -86400, come indicato da documentazione IBM-DS.

Il valore come si vede è negativo -86400 secondi.

Se eseguiamo in oracle la funzione presente sotto avremo come risultato final -86400.


———————————————————————————————————

create or replace  

FUNCTION SecondsSinceFromTimestamp

(start_time_in TIMESTAMP, end_time_in TIMESTAMP)RETURN NUMBER

AS

l_days NUMBER;

l_hours NUMBER;

l_minutes NUMBER;

l_seconds NUMBER;

sec_tot NUMBER;

BEGIN

SELECT 

  EXTRACT(DAY FROM start_time_in – end_time_in)

, EXTRACT(HOUR FROM start_time_in – end_time_in)

, EXTRACT(MINUTE FROM start_time_in – end_time_in)

, extract(SECOND FROM start_time_in – end_time_in)

INTO l_days, l_hours, l_minutes, l_seconds

FROM dual;

 

sec_tot := l_seconds + l_minutes*60 + l_hours*60*60 + l_days*24*60*60;

RETURN sec_tot;

END;

ELCARO

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *