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 的值转换为天数:
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;