Jeśli używasz 10g lub nowszego, możesz uczynić funkcję CONCAT() nieco bardziej wydajną, używając operatora MULTISET UNION:
FUNCTION concat (
iList1 IN ID_ARRAY,
iList2 IN ID_ARRAY
)
RETURN ID_ARRAY IS
lConcat ID_ARRAY;
BEGIN
lConcat := iList1
MULTISET UNION
iList2 A
;
RETURN lConcat;
END concat;
Możesz zwiększyć wydajność, wypełniając kilka różnych tablic, a następnie wywołując MULTISET UNION raz dla wszystkich:
lConcat := iList1
MULTISET UNION
iList2
MULTISET UNION
iList3
MULTISET UNION
iList4;
Używanie dynamicznego SQL - prawdopodobnie w celu zastąpienia różnych get_idsN()
funkcje - może to być podejście warte zbadania, ale prawdopodobnie nie da ci zbyt wiele, jeśli w ogóle, w drodze do poprawy wydajności.
Tabele tymczasowe nie są dobrym pomysłem, ponieważ działają bardzo słabo w porównaniu do wykonywania czynności w pamięci.