2011-12-22 46 views
2

喜试图找出采取的API调用的执行时间:这里是代码存储过程的执行时间不来正确

DECLARE 
l_time timestamp; 
l_lapsetime VARCHAR2(100); 
BEGIN 
select systimestamp into l_time from dual;  
--here goes my API call 
select to_char((systimestamp-l_time),'HH24:MI:SS') into l_lapsetime from dual;  
DBMS_OUTPUT.PUT_LINE('Time taken ' || l_lapsetime); 
END; 

我所期待的结果以毫秒为单位来,但我获得输出为:

Time taken +000000000 10:30:00.016938000 

是不是这次太多?

回答

3

当您减去两个时间戳时,结果为INTERVAL

TO_CHAR没有定义间隔,这里发生的是Oracle执行从INTERVAL到VARCHAR2的标准隐式转换,忽略了第二个参数。

如果要间隔转换成字符,请使用EXTRACT

SELECT extract(hour FROM v_interval) || ':' 
      || extract(minute FROM v_interval) || ':' 
      || extract(SECOND FROM v_interval) 
     FROM (SELECT &timestamp2 - &timestamp1 v_interval FROM dual)