Мне нужно собрать множество идентификаторов из пары разных таблиц в какую-то переменную, чтобы передать ее другой функции. Из каких таблиц брать идентификаторы - это динамически, в зависимости от параметра iVar ниже. Вопрос в том, нет ли лучшего способа сделать это, поскольку при таком подходе придется многократно копировать и перераспределять массивы. Лучше бы все это вставить во временную таблицу? Было бы лучше использовать динамический sql. См. Функцию get_ids ниже:
FUNCTION concat (
iList1 IN ID_ARRAY,
iList2 IN ID_ARRAY
)
RETURN ID_ARRAY IS
lConcat ID_ARRAY;
BEGIN
SELECT column_value BULK COLLECT INTO lConcat FROM (
(SELECT column_value FROM TABLE(CAST( iList1 AS ID_ARRAY)))
UNION ALL
(SELECT column_value FROM TABLE(CAST( iList2 AS ID_ARRAY)))
);
RETURN lConcat;
END concat;
FUNCTION get_ids (
iVar IN NUMBER
)
RETURN ID_ID_ARRAY IS
lIds ID_ARRAY;
BEGIN
lids := get_ids0();
IF iVar = 1 THEN
lIds := concat(lFilter, get_ids1());
ELSE
lIds := concat(lFilter, get_ids3());
IF iVar = 4 THEN
lIds := concat(lFilter, get_ids4());
END IF;
END IF;
RETURN lIds;
END get_ids;