如何在plsql中获取执行开始时间和执行结束时间之间的差异

时间:2012-07-30 06:20:39

标签: 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

3 个答案:

答案 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"));