I like the solution from Adam Hawkes using DBMS_SCHEDULER chains. Did not know about this since I am still using DBMS_JOB and have not rewritten the code yet.
In any case ... the solution that I am currently using for this is a combination of DBMS_JOB (although you should probably use DBMS_SCHEDULER since DBMS_JOB is deprecated as you noticed) and DBMS_ALERT.
Jobs are created using DBMS_JOB. Then we wait for the completion of work using dbms_alert.register and dbms_alert.waitany. Each job, when it is completed, uses dbms_alert.signal. A problem may arise if the task completes and signals that the parent is ready, but I'm sure you can get around this.
I assume DBMS_SCHEDULER chains are probably the way you should do it now, but just adding my answer for completeness.
source share