2016-06-14 95 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的语法!亚历克斯非常感谢你! –