In diesen Spalten stehen, wie die Namen es bereits andeuten, jeweils die
Startzeit und Endezeit eines bestimmten Prozesses.
Möchte man jetzt die Dauer errechnen, hilft die folgende Funktion:
CREATE OR REPLACE function date_diff(i_d1 date, i_d2 date) return VARCHAR2 is
v_datediff number;
v_days number;
v_hours number;
v_minutes number;
v_seconds number;
v_datechar varchar2(25):='';
begin
if i_d1 is null or i_d2 is null then
return null;
else
select (i_d2 - i_d1) into v_datediff from dual;
v_days := trunc(v_datediff);
v_hours := trunc(v_datediff * 24 - v_days * 24);
v_minutes := trunc(v_datediff * 24 * 60 - v_hours * 60);
v_seconds := trunc(v_datediff * 24 * 60 * 60 - v_minutes * 60);
v_hours := v_hours + v_days*24;
v_datechar:= to_char(v_hours,'FM09')||':'||to_char(v_minutes,'FM09')||':'||to_char(v_seconds,'FM09');
return v_datechar;
end if;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(substr(SQLERRM ||' '|| SQLCODE, 1, 255));
return null;
end;
Diese Funktion berechnet den Unterschied zwischen 2 Zeitstempeln im
Format HH:MM:SS (Stunden:Minuten:Sekunden). Eine Differenz von mehr als
einem Tag wird dabei in Stunden umgerechnet.
So kann man z.B. alle Prozesse rausfinden, die länger als 1 Stunde
benötigt haben:
SELECT p.name, s.start_time,s.end_time,
date_diff(s.start_time,s.end_time) AS dauer
FROM process p,
status s
WHERE s.process_id=p.process_id AND
date_diff(s.start_time,s.end_time) > '01:00:00'
ORDER BY dauer
