注册

generate_series怎么转成一个table呢,有没有能改造一下的,有没有办法做到呢,用到大量的这个函数,业务上无法修改

maybe 2023/06/20 626 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:centos
【CPU】:
【问题描述】*:
create or replace type generate_series_table is varray(10000000) of varchar2(100);

create or replace function generate_series
(pstart varchar2(200),
pstop varchar2(200),
step_interval varchar2(200) default 1)
return generate_series_table pipelined
as
v_params generate_series_table:=generate_series_table();
v_out number:=1;
v_is_date number;
v_step_interval number;
v_step_interval_date varchar2(500);
v_sql varchar2(500);
begin
if isdate(pstart)=0 or isdate(pstop)=0 then
while pstart::number<=pstop::number loop
v_params.extend();
v_params(v_out):=pstart::number;
pipe row(v_params(v_out));
pstart:=pstart::number+step_interval;
v_out:=v_out+1;
end loop;
else
select regexp_substr(step_interval,'[0-9]+') into v_step_interval from dual;
select upper(regexp_substr(step_interval,'[a-zA-Z]+')) into v_step_interval_date from dual;
while to_timestamp(pstart,'yyyy-mm-dd hh24:mi:ss')<=to_timestamp(pstop,'yyyy-mm-dd hh24:mi:ss') loop
v_params.extend();
v_params(v_out):=pstart;
pipe row(v_params(v_out));
v_sql:='select dateadd('||v_step_interval_date||','||v_step_interval||','||''''||pstart||''''||')';
execute immediate v_sql into pstart;
v_out:=v_out+1;
end loop;
end if;
end;
现在这个函数的执行效果:
image.png
我需要的效果是table
image.png

回答 0
暂无回答
扫一扫
联系客服