Я никогда не пробовал это с функцией Java самостоятельно. Но подход должен быть следующим:
Запустите ваш запрос с подсказкой PARALLEL:
select /*+ PARALLEL(t) */ samplePackage.prepareMessage(t.message) as text
from sampleSchema.sampleTable t;
Чтобы успешно выполнить SELECT параллельно, Oracle необходимо знать, что ваша функция Java безопасна для этого. Поэтому вы должны объявить его как PARALLEL_ENABLE или предоставить RESTRICT_REFERENCES.
CREATE OR REPLACE FUNCTION PREPARE_MESSAGE(message IN VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE
AS LANGUAGE JAVA
NAME 'sampleSchema.samplePackage.prepareMessage(Java.lang.String) return Java.lang.String';
Запрос становится:
select /*+ PARALLEL(t) */ PREPARE_MESSAGE(t.message) as text
from sampleSchema.sampleTable t;
Существуют дополнительные ограничения, применимые к функции, например, он не может выполнять операторы DML. В противном случае параллельное выполнение невозможно.
Как я уже сказал: я не пробовал это с Java. Но это направление идти.
Обновление: Я изменил код с использования пакета на использование функции. Так должно быть проще.