Here's an example where I process rows in monthly batches by using 'create_chunks_by_sql'.
SQL> create table t as select * From dba_objects;
Table created.
SQL>
SQL> declare
2 l_update_statement constant varchar2(1000)
3 := 'update t set object_id = -object_id '||
4 'where created >= add_months(date ''2017-01-01'',:start_id) '||
5 'and created < add_months(date ''2017-01-01'',:end_id)';
6
7 l_task_name constant varchar2(20) := 'task1';
8 begin
9 begin
10 dbms_parallel_execute.drop_task(l_task_name);
11 exception
12 when others then null;
13 end;
14
15 dbms_parallel_execute.create_task(l_task_name);
16
17 dbms_parallel_execute.
18 create_chunks_by_sql (
19 task_name=>l_task_name
20 , sql_stmt=>'select rownum-1,rownum from dual connect by level <= 8'
21 , by_rowid=>false
22 );
23
24 dbms_parallel_execute.
25 run_task(task_name=>l_task_name
26 , sql_stmt=> l_update_statement
27 , language_flag=>dbms_sql.native
28 , parallel_level=>3
29 );
30 end;
31 /
PL/SQL procedure successfully completed.