Because you HAVE the old snapshot - the cursor c1 that selects from table being updated.
Why it is giving this error eventhough I'm commiting frequently?
what I've to modify in above procedure to run this update successfully?
In the where clause you must put the condition to restrict the update to not yet updated rows.
update ... where ... and rownum<=10000;
exit when sql%rowcount<10000;
The whole difference between a little boy and an adult man is the price of toys