As the name suggests, you have to pass an argument of type ANYDATA. So a quick conversion and you'll be good to go
SQL> create or replace type my_varray as varray(5) of number;
2 /
Type created.
SQL>
SQL> drop table t purge;
Table dropped.
SQL>
SQL> create table t ( x int );
Table created.
SQL>
SQL> create or replace
2 procedure load_t(v my_varray) is
3 begin
4 for i in 1 .. v.count loop
5 insert into t values (v(i));
6 end loop;
7 commit;
8 end;
9 /
Procedure created.
SQL>
SQL> begin
2 dbms_scheduler.create_program (
3 program_name => 'pgm_load_t',
4 program_type => 'stored_procedure',
5 program_action => 'load_t',
6 number_of_arguments => 1,
7 enabled => false,
8 comments => 'program to run a stored procedure.');
9
10 dbms_scheduler.define_program_argument (
11 program_name => 'pgm_load_t',
12 argument_name => 'v',
13 argument_position => 1,
14 argument_type => 'my_varray');
15
16 dbms_scheduler.enable (name => 'pgm_load_t');
17 END;
18 /
PL/SQL procedure successfully completed.
SQL> declare
2 v my_varray := my_varray(1,2,3,4);
3 a sys.anydata := SYS.ANYDATA.ConvertCollection(v);
4 begin
5 dbms_scheduler.create_job (
6 job_name => 'job_load_t',
7 program_name => 'pgm_load_t',
8 start_date => SYSTIMESTAMP,
9 enabled => false,
10 comments => 'Job to run pgm');
11
12 dbms_scheduler.set_job_anydata_value (
13 job_name => 'job_load_t',
14 argument_position => 1,
15 argument_value => a
16 );
17
18 dbms_scheduler.enable ('job_load_t');
19
20 end;
21 /
PL/SQL procedure successfully completed.
SQL>
SQL> select * from t;
X
----------
1
2
3
4