Ключевой вопрос заключается в том, объединены ли сеансы в вашем вызывающем приложении или они «липкие».
Если одно и то же соединение / сеанс повторно используется вашей внешней программой для каждой транзакции, тогда сохранение parentId в переменной пакета будет правильным.
Если у вас есть пул соединений, то использование переменных пакета начинает становиться хитрым / позитивно опасным.
Если вызов для вставки дочерних элементов находится в другой транзакции, и у вас есть пул соединений, я не вижу способа, которым вы могли бы избежать сообщить второй транзакции требуемый parentId.
Предупреждение: если вас больше интересует упрощение API для пакета, чем производительность, и у вас есть что-то в этом роде. , ,
Для каждого вызова базы данных во внешнем приложении установите что-то, что однозначно идентифицирует вызывающий процесс, в SYS_CONTEXT или переменную пакета (у нас есть что-то вроде этого, чтобы мы могли получить вызывающий метод и «реальный», а не объединенный / b пользователь).
Создание вторичного ключа / индекса для родительской таблицы на основе этого уникального идентификатора и времени.
Создайте функцию для получения самого последнего ParentId для текущего сеанса (при условии, что уникальный идентификатор будет установлен правильно).
Используйте эту функцию в вашем дочернем элементе.