Here is one way to do it. You pass a shell array as a space-separated string to a stored procedure, and then convert it to a collection — there are many ways to do this. In this example, I use string_to_table()the built-in package function apex_util.
Here is the procedure (maybe a function, it is up to you):
create or replace procedure p1(p_list in varchar2)
is
l_array apex_application_global.vc_arr2;
begin
l_array := apex_util.string_to_table(p_list, ' ');
for i in l_array.first..l_array.last loop
dbms_output.put_line(l_array(i));
end loop;
end;
Here we define and pass the shell array:
array[0] = 'a'
array[1] = 'b'
array[2] = 'c'
sqlplus testlab/testlab@nkpdb <<EOF
set serveroutput on
exec p1('${array[*]}');
EOF
Result:
SQL> exec p1('a b c');
a
b
c
PL/SQL procedure successfully completed