我需要使用数字填充数组(它是表的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;
有人可以给我一些关于如何实现这一目标的见解。到目前为止,我所得到的是我有点理解的例子。
答案 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;
您不必担心显式打开,关闭,获取,分配或取消分配。所有这些都是由循环处理的。