存储过程执行时间不正确

时间:2011-12-22 05:39:19

标签: performance oracle stored-procedures timestamp

您正在尝试找出执行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

这次不是太多了吗?

1 个答案:

答案 0 :(得分:3)

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

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

如果您想将INTERVAL转换为字符,请使用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)