我在使用一块批量收集sql时遇到了一些问题,我希望你可以帮忙解决这个问题。
使用以下代码:
declare
cursor c1
is
select customer,product
from products;
type type_cust is table of products.customer%type;
type type_prod is table of products.product%type;
v_array_cust type_cust;
v_array_prod type_prod;
begin
open c1;
loop
fetch c1
into v_array_cust, v_array_prod
limit 1000;
exit when c1%notfound;
for i in 1..v_array_cust.count
loop
--Do some processing here.
end loop;
end loop;
end;
/
光标c1返回53166行。
然而,代码处理53000行然后结束。似乎在去检索最后166条记录时会出现某种失败。如果找到的记录少于1000条记录,那么fetch会返回%notfound吗?我应该将出口移动到循环的末尾吗? (我将尝试这个,但它深入一段代码需要3个小时才能达到失败点。)
提前致谢。
答案 0 :(得分:9)
好吧,比我已经做过的更好的谷歌搜索给了我答案,你不应该使用%notfound with limit。
检查here以获取解释。
答案 1 :(得分:4)
仅供参考,这是一个简单的更改,使代码正确运行:
open c1;
loop
fetch c1
into v_array_cust, v_array_prod
limit 1000;
-- the count will be 0 if no rows were found, so this loop will do nothing.
for i in 1..v_array_cust.count
loop
--Do some processing here.
end loop;
-- exit now if the last fetch got the last set of rows
exit when c1%notfound;
end loop;
close c1;
答案 2 :(得分:1)
很抱歉成为那个说出来的人,但是确定!游标!...你写这个的方式看起来你来自线性编程背景。您是否考虑过基于集合的解决方案?