How long is a piece of string?
Firstly, don't use pl/sql if it can be avoided. Use SQL instead. Size your rollback segments accordingly and run the delete statements. It shouldn't take that long depending on resources available, other processes running etc; 3 million records is not that much really.