2012-07-30 115 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; 
相关问题