Как упоминает @LoztInSpace, вы почти наверняка можете заменить свой цикл PL / SQL на итерацию «около 10 000 раз», чтобы стать движущим запросом.IE: если вам нужно что-то сделать с результатами из каждой строки, возвращенной в вашем запросе, который вы разместили, для каждой строки в «сделать что-то около 10 000 раз», которая подразумевает, что внешний цикл - это другой запрос, то вложите свой запрос (ну, Кедарверсия запроса) внутри вашего внешнего цикла.
При каждом выполнении цикла PL / SQL должен вызываться механизм SQL, что вызывает переключение контекста;это, вероятно, 10 мс из ваших 30 мс, если не больше.Поиск https://asktom.oracle.com с ключевыми словами PL/SQL "nested loop"
для примеров.
Вы также можете посмотреть PL / SQL операторы массовой обработки FORALL
и BULK COLLECT
для возможных улучшений.