[英]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.