
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
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;