Si vous utilisez 10g ou une version ultérieure, vous pouvez rendre la fonction CONCAT() un peu plus efficace en utilisant l'opérateur 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;
Vous pouvez rendre les choses plus efficaces en remplissant plusieurs tableaux différents, puis en appelant MULTISET UNION une fois pour tous :
lConcat := iList1
MULTISET UNION
iList2
MULTISET UNION
iList3
MULTISET UNION
iList4;
Utilisation de SQL dynamique - probablement pour remplacer les différents get_idsN()
fonctions - peut être une approche qui vaut la peine d'être étudiée, mais qui ne vous apportera probablement pas grand-chose, voire rien, en termes d'amélioration des performances.
Les tables temporaires ne sont pas une bonne idée, car elles fonctionnent très mal par rapport à faire des choses en mémoire.