Объединение коллекций в PLSQL

Мне нужно собрать множество идентификаторов из пары разных таблиц в какую-то переменную, чтобы передать ее другой функции. Из каких таблиц брать идентификаторы - это динамически, в зависимости от параметра 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;
6
задан Joel Palmert 16 September 2011 в 11:49
поделиться