在 PL/SQL 中附加来自每个循环迭代的多条记录
Posted
技术标签:
【中文标题】在 PL/SQL 中附加来自每个循环迭代的多条记录【英文标题】:Append multiple records from each loop iteration in PL/SQL 【发布时间】:2016-08-16 04:56:56 【问题描述】:我正在尝试在 Oracle PL/SQL 中编写一个如下所示的 sn-p 过程:
> 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
实际上我被这个附加任务困住了。在每次迭代中,将使用选择查询提供不同数量的输出。我想将所有记录附加到一个数据结构中。
假设内部选择查询返回 3 列 ColA、ColB、ColC 并且循环迭代 2 次。然后在第一次迭代中返回:
1,2,3 3,4,5
在下一次迭代中,它返回 4,5,7。
该过程将返回一些包含以下内容的数据结构:
1,2,3 3,4,5 4,5,7
有什么办法吗?
【问题讨论】:
返回的数据类型是什么?数组、连接的 varchar 等? 我可以返回任何包含所需数据集的东西。我认为任何复合数据类型都可以。 【参考方案1】:我想这可以通过pipelined functions 解决。 所以它看起来像这样:
声明一个类型
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);
【讨论】:
以上是关于在 PL/SQL 中附加来自每个循环迭代的多条记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pl/sql 块插入多条记录?我在这段代码中收到错误消息
PL/SQL API调用/查询返回多条记录,如何传入多个变量