You are already doing it in your cursor. All I'm saying is - if you have sufficient memory you can do:
fetch bulk collect into ... -- with NO LIMIT
and then do deletes in batches of (say) 100,000 as you are currently doing, eg
loop
c := 1
forall i in c .. least(c+100000,lp_rec_rowid.count)
DELETE FROM ABC.XYZ where rowid = LP_rec_rowid(i);
c := c + 100000;
exit when c > lp_rec_rowid.count;
end loop;
or similar