繁体   English   中英

甲骨文 选择并起作用

[英]Oracle. Select and function

我有这样的功能:

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,round等。

您可以用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;

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

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

我相信选择Into语句将对此起作用? 如果只希望查询结果进入函数语句。 参数为in表示将采用function_name。 当然,我可能会遥遥领先,因为我从未使用它来将信息转化为功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM