例如我有一个查询
select (select 1 from dual) res1
, (select 2 from dual) res2
, (select 3 from dual) res3
from dual;
结果:
res1 res2 res3
---- ---- ----
1 2 3
我想用1到3的循环创建函数,这将返回相同的结果,1行中的3列
FOR i IN 1..3 LOOP
END LOOP;
功能体应该达到什么目标? 我知道我可以使用PIVOT在select查询中得到这个结果,但是函数的参数是动态的(numberFrom(1)和numberTo(3)),因为它我需要循环
伪代码: 在内部循环我有选择查询,它使用循环中的参数。 select的结果应该是最终结果中的新列
FOR i IN 1..3 LOOP
select i from dual;
END Loop;
我想要这个:
不是这个:
我可以传递任何整数作为参数。所以,如果我通过3和8,我应该qet 3,4,5,6,7,8
答案 0 :(得分:2)
“我可以传递任何整数作为参数。所以如果我通过3和8我应该得到3,4,5,6,7,8”
您需要动态SQL。
create or replace function get_numbers
( p_start in number, p_end in number )
return sys_refcursor
is
v_stmt varchar2(32767);
n simple_integer := 0;
rc sys_refcursor;
begin
v_stmt := 'select ';
for idx in p_start..p_end loop
v_stmt := v_stmt || to_char( p_start + n);
n := n+1;
v_stmt := v_stmt || 'res_' || to_char( n);
if p_start + n < p_end then
v_stmt := v_stmt || ',';
end if;
end loop;
v_stmt := v_stmt || ' from dual';
open rc for v_stmt;
return rc;
end;