甲骨文。选择并起作用

帕维尔·米(Pavel Mi)。

我有这样的功能:

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问题是如何将查询结果传递给函数?谢谢!

亚历克斯·普尔

一个用户定义的函数没有区别的行为向任何内置的功能,所以你怎么称呼它,就像任何其他的功能- 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;

只要查询列与函数期望的数据类型相同(或可以隐式转换为该类型),就可以将其作为函数的参数传递。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章