如何在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
。
答案 0 :(得分: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 :(得分:2)
您应该使用DBMS_UTILITY.GET_TIME函数。 此功能以100秒为单位确定当前时间。该子程序主要用于确定经过的时间。子程序被调用两次 - 在某个过程的开始和结束时 - 然后从第二个(稍后的)数字中减去第一个(较早的)数字以确定经过的时间。例如:
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;
答案 2 :(得分:-1)
请尝试以下代码
TO_HOURS:= L_END_TIME - L_START_TIME;
dbms_output.put_line (to_char(TO_HOURS, "your format"));