在 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调用/查询返回多条记录,如何传入多个变量

PL/SQL 循环“返回”记录

Oracle PL/SQL 将游标(来自函数)中的每个值一一分配给另一个游标

实验六附加:PL/SQL编程基础

PL/SQL语法简介(匿名PL/SQL块)