pl / sql函数返回多列

时间:2017-10-09 06:22:55

标签: sql oracle plsql

例如我有一个查询

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;

我想要这个:

enter image description here

不是这个:

enter image description here

我可以传递任何整数作为参数。所以,如果我通过3和8,我应该qet 3,4,5,6,7,8

1 个答案:

答案 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;