/***************************  Create syncronize table *************************/

create table PARALLEL_EXECUTIONS
(
  JOBID                              NUMBER(13, 0)  ,
  PROCESSID                          NUMBER(13, 0)  ,
  PARENT_NAME                        VARCHAR2(50)  
)
/

grant execute on dbms_lock to ... -- only for testing the procedure bellow
/

/***************************  Create procedure *************************/

create or replace procedure aggregate_in_parallel
as
  v_job number;
  v_parent_name parallel_executions.parent_name%type:='LOCK_SLEEP';
  v_cnt number; 
begin
    
 dbms_job.submit( v_job, 'dbms_lock.sleep(30);' );
 insert into parallel_executions(JOBID,PROCESSID,PARENT_NAME)
  values (v_job,1,v_parent_name);
 commit;
 
 dbms_job.submit( v_job, 'dbms_lock.sleep(20);' );
  insert into parallel_executions(JOBID,PROCESSID,PARENT_NAME)
   values (v_job,2,v_parent_name);
 commit;
 
 dbms_job.submit( v_job, 'dbms_lock.sleep(10);' );
   insert into parallel_executions(JOBID,PROCESSID,PARENT_NAME)
    values (v_job,3,v_parent_name);
 commit;
 
 loop
  dbms_lock.sleep(20);
  delete from parallel_executions pe where not exists
 (select 1 from user_jobs uj where uj.job=pe.jobid) and PARENT_NAME=v_parent_name;
  commit;
  select count(*) into v_cnt from parallel_executions where PARENT_NAME=v_parent_name;
  exit when (v_cnt = 0);
 end loop;
    
end;
/

/***************************  Test it  *************************/
set serveroutput on
begin
aggregate_in_parallel;
dbms_output.put_line('Finish .... continue with others serial procedures ...');
end;
/

    Source: geocities.com/aritonc/download

               ( geocities.com/aritonc)