我试图在Oracle PL/SQL中编写一个过程,看起来像下面的代码片段:
> LOOP:
>READ INPUT FROM CURSOR
>GET OUTPUTS USING SELECT QUERY(OUTPUT RECORD COUNT MAY VARY ON EACH ITERATION)
>APPEND OUTPUT TO SOME DATA STRUCTURE
> END LOOP;
>RETURN DATA STRUCTURE
实际上我被这个附加任务困住了。在每次迭代中,使用选择查询可以得到不同数量的输出。我想把所有记录附加到一个数据结构中。
假设内部select查询返回3列ColA,ColB,ColC,循环迭代2次。然后在第一次迭代中返回:
1、2、3
3、4、5
在下一次迭代中,它返回4,5,7。
过程将返回一些包含以下内容的数据结构:
1、2、3
3、4、5
4、5、7
有办法吗?
我想这可以用流水线函数来解决。所以它看起来像这样:
声明类型
TYPE my_record is RECORD(
cola number,
colb number,
colc number);
TYPE my_table IS TABLE OF my_record;
一个函数
function get_results() RETURN my_table PIPELINED is
my_rec my_record:=null;
cursor myCursor(data number) is
--some select expression
;
begin
--loop through outputs
FOR item IN myCursor(data) LOOP
my_rec:=null;
select item.value1,item.value2,item.value2 into rec from dual;
PIPE ROW(my_rec);
end loop;
return;
end;
,最后使用
SELECT * FROM TABLE(get_results);