Necesito recopilar una gran cantidad de identificadores de un par de tablas diferentes en una variable de algún tipo para pasar a otra función. De qué tablas tomar los identificadores es dinámico, dependiendo del parámetro iVar a continuación. La pregunta es si no hay una mejor manera de hacerlo ya que este enfoque tendrá que copiar y volver a asignar los arrays varias veces. ¿Sería mejor insertarlo todo en una tabla temporal? ¿Sería mejor usar sql dinámico? Véase la función get_ids a continuación:Colecciones de concatenación en PLSQL
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;
El ALL es opcional. MULTISET UNION no filtra las entradas de ninguna manera. – APC
debería haber sido "no ordena OR filtro" 8-) – APC