选择数字到数组然后循环它们

时间:2014-11-24 13:18:32

标签: sql oracle plsql

我需要使用数字填充数组(它是表的ID列),然后遍历调用存储过程的数组。

我无法弄清楚如何声明一个数组,在该数组中我不知道运行时的大小然后填充它。

目前,我有以下内容:

declare 
    type idArray is table of number index by pls_integer;
  theIdArray idArray;
begin

  select id into theIdArray from table_name_here where report_id = 3449;
end;

这不起作用,但我不知道为什么。然后我还需要遍历我的数字数组并调用存储过程。如下所示:

for i in theIdArray.FIRST..theIdArray.LAST LOOP
  stored_proc_here(i);
END LOOP;

有人可以给我一些关于如何实现这一目标的见解。到目前为止,我所得到的是我有点理解的例子。

2 个答案:

答案 0 :(得分:2)

您的代码失败,因为您使用了条款into。对于填充集合,请改为使用bulk collect into

declare 
    type idArray is table of number index by pls_integer;
  theIdArray idArray;
begin

  select id bulk collect into theIdArray from table_name_here where report_id = 3449;
end;

答案 1 :(得分:1)

如果你所做的只是循环,那么使用游标循环就好了。

declare
    cursor Ids is
        select ID from table_name_here where report_id = 3449;
...
for Report in Ids loop
    stored_proc_here( Report.ID );
end loop;

您不必担心显式打开,关闭,获取,分配或取消分配。所有这些都是由循环处理的。