2013-06-05 92 views
0

請在下面的代碼中幫我計算從DBMS_UTILITY.get_cpu_time到HH:MI:SS:MS的時間。以百分之一秒爲間隔

Declare 
v_start_time number; 
v_end_time number; 
v_exec_time varchar2(100); 
begin 
v_start_time:=DBMS_UTILITY.get_cpu_time; 

dbms_output.put_line('Time calculation'); 

v_end_time:=DBMS_UTILITY.get_cpu_time; 

v_exec_time:= (v_end_time-v_start_time); --please help me here i want v_exec_time in the format of HH:MI:SS:MS) 

end; 
/

在此先感謝。

+0

你到目前爲止試過了什麼?您只需將百分之一秒轉換爲您知道的時間間隔。 –

+0

假設我在v_exec_time變量中獲得150值。我想知道像HH:MI:SS的時間格式的價值:MS 請幫助我。 –

+0

是的,我明白了這個問題 - 因爲它很簡單,我想知道你遇到了哪個問題。 –

回答

1

DBMS_UTILITY.get_cpu_time以1/100秒(hsecs)返回時間。

首先,我們可以得到完整的秒數如下:

v_secs := floor(v_exec_time/100); 

中hsecs其餘然後

v_exec_time - (v_secs*100); 

你想毫秒這樣:

v_remainder_ms := (v_exec_time - (v_secs*100)) * 10; 

現在對於HH:MI:SS部分,我們可以使用Oracle日期函數。首先v_secs的值轉換爲天:

v_days := v_secs/60/60/24; 

現在用它來得到一個HH:MI:SS值:

TO_CHAR(TRUNC(SYSDATE)+v_days,'HH24:MI:SS') 

(注:需要使用HH24否則會得到類似的值'12 :00:00:001' )

並全面HH24:MI:SS:你想MS值:

TO_CHAR(TRUNC(SYSDATE)+v_days,'HH24:MI:SS')||':'||TO_CHAR(v_remainder_ms,'FM000') 

所以把他們放在一起:

Declare 
    v_start_time number; 
    v_end_time number; 
    v_exec_time varchar2(100); 
    v_secs integer; 
    v_remainder_ms integer; 
    v_days number; 
begin 
    v_start_time:=DBMS_UTILITY.get_time; 

    dbms_output.put_line('Time calculation'); 

    v_end_time:=DBMS_UTILITY.get_time; 

    v_exec_time:= (v_end_time-v_start_time); 

    v_secs := floor(v_exec_time/100); 

    v_remainder_ms := (v_exec_time - (v_secs*100)) * 10; 

    v_days := v_secs/60/60/24; 

    dbms_output.put_line ('Result='||TO_CHAR(TRUNC(SYSDATE)+v_days,'HH24:MI:SS') 
     ||':'||TO_CHAR(v_remainder_ms,'FM000')); 

end; 
+0

非常感謝您... –