请帮助我在下面的代码中计算时间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;
/
先谢谢。
答案 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;