2016-06-14 94 views
0

我有功能是這樣的:Oracle。選擇和功能

CREATE OR REPLACE FUNCTION IntervalToSec(Run_Duration interval day to second) RETURN NUMBER IS 
vSeconds NUMBER ; 
BEGIN 
SELECT EXTRACT(DAY FROM Run_Duration) * 86400 
    + EXTRACT(HOUR FROM Run_Duration) * 3600 
    + EXTRACT(MINUTE FROM Run_Duration) * 60 
    + EXTRACT(SECOND FROM Run_Duration) 
    INTO 
    vSeconds 
    FROM DUAL ; 
    RETURN vSeconds ; 
END; 

即間隔數據轉換成總秒數 然後我有選擇查詢:

select RUN_DURATION from SYS.USER_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'WASTE_MESSAGES_JOB' and LOG_DATE > (systimestamp - INTERVAL '0 00:10:00.0'DAY TO SECOND(1)) 
order by LOG_DATE desc; 

輸出像:00 00:00:01.000000 問題是我如何管道查詢結果到功能? 謝謝!

回答

1

一個user defined function沒有不同的行爲的任何以built-in functions,所以你怎麼稱呼它,就像任何其他的功能 - TO_CHAR,TO_DATE,TRUNC,圓形等

你可以寫在PL用戶定義函數/ SQL,Java或C來提供在SQL或SQL內置函數中不可用的功能。用戶定義的函數可以出現在任何可以出現表達式的SQL語句中。

例如,用戶定義的函數可以在使用下列內容:

  • SELECT語句
  • 的選擇列表...

所以只需要調用該函數作爲查詢的一部分:

select IntervalToSec(RUN_DURATION) 
from SYS.USER_SCHEDULER_JOB_RUN_DETAILS 
WHERE JOB_NAME = 'WASTE_MESSAGES_JOB' 
and LOG_DATE > (systimestamp - INTERVAL '0 00:10:00.0'DAY TO SECOND(1)) 
order by LOG_DATE desc; 

只要被查詢的列是該函數期望的相同數據類型(或者可以隱式轉換爲該類型),它可以作爲函數的參數傳遞。

+0

O我的.....這很容易,但我甚至不能:谷歌:corrext的語法!亞歷克斯非常感謝你! –