Oracle 10g'de, belirli işlemlerin ne kadar sürdüğünü gösteren zaman damgalarını içeren bir tablom var. İki zaman damgası alanı vardır: starttime ve bitiş zamanı. Bu zaman damgaları tarafından verilen sürelerin ortalamalarını bulmak istiyorum.Zaman aralıkları nasıl ortalama?
select avg(endtime-starttime) from timings;
Ama olsun: Ben denemek
select
avg(extract(second from endtime - starttime) +
extract (minute from endtime - starttime) * 60 +
extract (hour from endtime - starttime) * 3600) from timings;
Ama gerçekten yavaş:
SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
Bu çalışır.
Aralıkları saniye sayısına çevirmenin daha iyi bir yolu var mı?
DÜZENLEME: Gerçekten yavaşlatan şey, starttime'den önce biraz zaman geçirmemdi. Bazı sebeplerden dolayı bu hesaplama inanılmaz derecede yavaşladı. Temel sorunum, bunları sorgu kümesinden kaldırılarak çözüldü. Oracle'da NUMBER
için INTERVAL DAY TO SECOND
açık bir dönüşüm yapmak için herhangi bir fonksiyon var gibi
FUNCTION fn_interval_to_sec (i IN INTERVAL DAY TO SECOND)
RETURN NUMBER
IS
numSecs NUMBER;
BEGIN
numSecs := ((extract(day from i) * 24
+ extract(hour from i))*60
+ extract(minute from i))*60
+ extract(second from i);
RETURN numSecs;
END;
[custom pl/sql işlevlerinin önemli bir performans yükü olduğunu] unutmayın (https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:60122715103602) ağır sorgular için uygun. – Vadzim