【问题标题】:Append multiple records from each loop iteration in PL/SQL在 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 等?
  • 我可以返回任何包含所需数据集的东西。我认为任何复合数据类型都可以。

标签: database oracle plsql cursor


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多