Please just use implicit cursors in the future for fetching data (most of the time, unless you need to array fetch so you can FORALL update/insert in the next step)
just join
declare
cursor C is select .... from A, B, C where ....;
begin
for x in C
loop
dbms_output.put_line( x...., x....., x.... );
end loop;
end;
/
just join, implicit cursor fetching will set up the record AND array fetch 100 rows at a time for you!!!
or if you need explicit fetching:
declare
cursor c is select .... from A, B, C where ....;
type myarray is table of c%rowtype index by binary_integer;
l_data myarray;
begin
open c;
loop
fetch c bulk collect into l_data limit 100;
/* process.... */
exit when c%notfound;
end loop;
end;
/