2011-12-22 45 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)