【发布时间】:2014-10-27 00:37:33
【问题描述】:
我对 pl/sql 嵌套表的要求如下:
我声明了一个嵌套表集合类型,并根据表中的查找填充元素。 如果查找产生多于一行(多于一个代码值),则将所有这些多个值添加到嵌套表中并继续。这是我卡住的地方。 我无法在异常中增加父计数器“indx”来处理这些多行。因为我不是,它只在嵌套表中存储最新数据,而不是全部。
declare
TYPE final_coll_typ IS TABLE OF varchar2(100);
l_final_coll final_coll_typ;
MULTI_FETCH EXCEPTION;
PRAGMA EXCEPTION_INIT(MULTI_FETCH, -1422); -- this is an ora error for exact fetch returns more than the required number of rows
begin
for indx in 1..<count> loop
<some processing logic here>
select code into l_final_coll(indx) from lookup_tbl where <some filter>;
exception
when MULTI_FETCH then
for p in (select code from lookup_tbl where <some filter>)
loop
l_final_coll(indx) := p.code;
dbms_output.put_line(l_final_coll(indx));
end loop;
continue; -- this is for further processing after the loop
end loop;
end;
假设,计数器 indx 的第一次迭代只为代码生成了一行数据。它存储在 l_final_coll(indx) 中。 假设 indx i 的下一次迭代主 for 循环为代码生成 2 行值。我的想法是捕获异常(ORA-01422)并继续在现有的嵌套表中添加这两个代码值。
因此,实际上,我的嵌套表现在应该在其元素中包含 3 个代码值。但是,目前,我只能让它填充其中的 2 个(第一次迭代的单个值和下一次迭代的最新值)
任何关于我如何做到这一点的指针都将不胜感激。
PS:尝试操作计数器变量 indx 和 p。但是,显然 pl/sql 不允许它用于“for 循环”。
【问题讨论】:
标签: collections plsql oracle11g