2012-07-30 114 views
0

如何獲取plsql中執行開始時間與執行結束時間之間的差異。如何在plsql中獲得執行開始時間與執行結束時間之間的差異

SET SERVEROUTPUT ON; 
DECLARE 
    l_start_time DATE :=sysdate +1; 
    l_end_time DATE := SYSDATE; 
    to_hours DATE; 
BEGIN 
    dbms_output.put_line(l_start_time); 
    dbms_output.put_line(l_end_time); 
    TO_HOURS:=TO_CHAR(L_END_TIME - to_date(L_START_TIME,'HH24:MI:SS')); 
    dbms_output.put_line (TO_HOURS); 
END ; 

我需要執行時間差和輸出在HH:MI:SS

回答

-1

試圖取悅後續代碼

TO_HOURS:= L_END_TIME - L_START_TIME; 
dbms_output.put_line (to_char(TO_HOURS, "your format")); 
+0

to_hours一定不能是日期類型。以上給出錯誤PLS-00382:表達式類型錯誤 – hol 2012-07-31 20:20:42

2

可以計算差值爲一個數字,然後從一天的分數計算。下面的示例腳本給出了下面的輸出

SET SERVEROUTPUT ON; 
DECLARE 
    l_start_time date := sysdate; 
    l_end_time date := SYSDATE+1; 
    l_diff  number; 
BEGIN 
    dbms_output.put_line('start time='||l_start_time); 
    dbms_output.put_line('end time ='||l_end_time); 
    l_diff :=l_end_time-l_start_time; 
    dbms_output.put_line('a) difference days ='||to_char(l_diff)); 
    dbms_output.put_line('a) difference hours ='||to_char(l_diff*24)); 
    dbms_output.put_line('a) difference minutes='||to_char(l_diff*24*60)); 
    dbms_output.put_line('a) difference seconds='||to_char(l_diff*24*60*60)); 
    l_start_time := to_date('31/07/2012 20:00:00','DD/MM/YYYY HH24:MI:SS'); 
    l_end_time := to_date('01/08/2012 04:15:44','DD/MM/YYYY HH24:MI:SS'); 
    l_diff :=l_end_time-l_start_time; 
    dbms_output.put_line('b) difference days ='||to_char(l_diff)); 
    dbms_output.put_line('b) difference hours ='||to_char(l_diff*24)); 
    dbms_output.put_line('b) difference minutes='||to_char(l_diff*24*60)); 
    dbms_output.put_line('b) difference seconds='||to_char(l_diff*24*60*60)); 
END ; 
/

輸出到:

start time=31-JUL-12 
end time =01-AUG-12 
a) difference days =1 
a) difference hours =24 
a) difference minutes=1440 
a) difference seconds=86400 
b) difference days =.3442592592592592592592592592592592592593 
b) difference hours =8.26222222222222222222222222222222222222 
b) difference minutes=495.733333333333333333333333333333333333 
b) difference seconds=29744 
1

您應該使用DBMS_UTILITY.GET_TIME功能。 該功能以百分之一秒爲單位確定當前時間。該子程序主要用於確定已用時間。子程序被調用兩次 - 在某個進程的開始和結束處 - 然後從第二個(較晚的)編號中減去第一個(較早的)編號以確定流逝的時間。例如:

declare 
    v_end_time  number(10) ; 
    v_start_time  number(10) ; 
begin 
    v_start_time := dbms_utility.get_time ; 
    -- <Your code is here> 
    null; 
    --<\Your code is here> 
    v_end_time := dbms_utility.get_time ; 

    dbms_output.put_line( 'Elapse Time= '|| to_char((v_end_time - v_start_time) /100) ||' seconds.'); 
end; 
相關問題