У меня возникла небольшая проблема с куском массива sql, который я надеялся, что вы сможете помочь.Проблема с выпуском Oracle Bulk Collect
С помощью следующего кода:
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 записей, есть какой-то провал.
Будет ли возврат возврата% notfound, если он найдет менее 1000 записей? Должен ли я переместить выход в конец цикла? (Я собираюсь попробовать это, но он глубоко в куске кода, который занимает 3 часа, чтобы добраться до точки отказа.)
Заранее спасибо.
+1 для нахождения ответа самостоятельно. –
Кстати, я не согласен с этой статьей. Просто неправильно говорить «не использовать% notfound with limit». Нет ничего плохого в использовании% notfound с лимитом, если вы положите их в правильном порядке (см. Мой ответ). –