Я могу заставить подобную функцию работать в TSQL, но я относительный новичок в PL / SQL, я надеюсь, что кто-то может объяснить мне, почему это объявление функции не скомпилируется.
t_interval_list_table - это табличный тип объектов t_interval, который имеет единственный атрибут varchar2 (20). Interval_Get_udf просто возвращает отформатированную строку типа varchar (2)
create or replace
FUNCTION fn_ExplodeIntervals (
startTime IN timestamp,
endTime IN timestamp,
inputInterval IN int)
RETURN t_interval_list_table AS intervalList t_interval_list_table := t_interval_list_table()
BEGIN
with SET0 as( select 1 from dual union all select 1 from dual)
, SET1 as ( select 1 from SET0 s1, SET0 s2)
, SET2 as ( select 1 from SET1 s1, SET1 s2)
, SET3 as ( select 1 from SET3 s1, SET3 s2)
, SET4 as ( select 1 from SET4 s1, SET4 s2)
, ControlSet AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1 from Dual)) rid FROM SET4)
select t_interval(Interval_Get_udf(TO_TIMESTAMP(startTime, 'dd/mm/yyyy') + rid/24 , 1))
into intervalList
from ControlSet;
RETURN intervalList;
END fn_ExplodeIntervals;