Ho bisogno di raccogliere molti ID da un paio di tabelle diverse in una variabile di qualche tipo da passare ad un'altra funzione. Le tabelle da cui prelevare gli ID sono dinamiche, a seconda del parametro iVar sottostante. La domanda è se non esiste un modo migliore per farlo poiché questo approccio dovrà copiare e allocare più volte gli array. Sarebbe meglio inserire tutto in un tavolo temporaneo? Sarebbe meglio usare dynamic sql. Vedere la funzione get_ids di seguito:Concatenazione di raccolte in 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;
L'ALL è opzionale. MULTISET UNION non filtra le voci in alcun modo. – APC
avrebbe dovuto essere "non ordina OR filter" 8-) – APC