This will probably be enough to make it work:
alter session enable parallel dml;
You can check the actual degree of parallelism with the following query:
select px_servers_executions, v$sql.* from v$sql where lower(sql_text) like '%insert%parallel%' order by last_load_time desc;
If you still do not get parallelism, there are many possible reasons. First, consider the following options:
select * from v$parameter where name like 'parallel%'
But you probably don't want parallelism for your insert statement. parallelism has a lot of overhead and is usually useful if you are dealing with many thousands or millions of records.
I assume your real problem is the time to parse a large SQL statement. Multi-table inserts are especially dangerous. If you try to insert more than a few hundred lines, your query will take many seconds to parse. And depending on your version of Oracle, it will just hang forever if you try to use 501 tables. It is much faster to run several small requests instead of one large request. For example, 5 inserts of 100 rows will be much faster than a single insert of 500 rows. (In general, this is the exact opposite of how to tune performance for Oracle. This is a special case due to errors related to parsing large SQL statements.)
source share