以秒为单位表示百分之一秒

时间:2013-06-05 09:34:34

标签: oracle time

请帮助我在下面的代码中计算时间HH:MI:SS:来自DBMS_UTILITY.get_cpu_time的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;
/

先谢谢。

1 个答案:

答案 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的值转换为days:

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;