Consider using associative arrays rather than nested tables ? For example, this works fine
declare
cursor c is
select 1 c1,
1 c2,
1 c3,
1 c4,
1 c5,
1 c6,
...
...
...
1 c1999,
1 c2000
from dual;
type t is table of c%rowtype index by pls_integer;
r t;
begin
open c; fetch c bulk collect into r; close c;
end;
/