Talvez esse problema já tenha sido resolvido, mas vou deixar minha contribuição, como o
Trevisolli comentou no post acima sobre trazer os registros de X em X linhas, pensei na utilização do bulk collect.
Dessa forma é possível retornar vários registros em um único fetch, tem um porém, esse recurso usa mais memória, então é importante verificar qual o tamanho X de linhas a trazer por fetch.
Segue um código de exemplo que eu fiz:
Selecionar tudo
PROCEDURE TESTE AS
--
CURSOR curOrders is
select order_id,
order_date,
order_mode,
customer_id,
order_status,
order_total,
sales_rep_id,
promotion_id,
warehouse_id,
delivery_type,
cost_of_delivery,
wait_till_all_available,
delivery_address_id,
customer_class,
card_id,
invoice_address_id
from orders;
--
TYPE tblOrders is table of orders%ROWTYPE INDEX BY PLS_INTEGER;
clOrders tblOrders;
--
vLimit PLS_INTEGER := 4000;
--
BEGIN
--
open curOrders;
--
loop
--
fetch curOrders
bulk collect into clOrders
limit vLimit;
--
dbms_output.put_line(to_char(clOrders.count));
--
exit when clOrders.count < vLimit;
--
end loop;
--
close curOrders;
--
END TESTE;