2016-06-14 9 views
0

機能:Oracle。選択し、私はこのような機能を持っている

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:総秒間隔のデータを変換し

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クエリを持って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私の..... ..... Thatsはとても簡単でしたが、私は傾けることもできます:google:corrext syntax !!!!アレックスは本当にありがとう!!!! –

0

https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems045.htm

私は、select into文は、このために働くだろうと考えていますか?クエリ結果をfunctionステートメントに入れるだけでよい場合。 theのためのパラメータは、それがfunction_nameを取ると言う。もちろん、私は関数に情報を得るために使ったことがないので、私は道を離れることができます。

関連する問題