Если вы используете 10g или более позднюю версию, вы можете сделать функцию CONCAT () несколько более эффективной, используя оператор 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;
Вы можете сделать вещи более эффективными, заполнив несколько различных массивов изатем вызов MULTISET UNION один раз для всех из них:
lConcat := iList1
MULTISET UNION
iList2
MULTISET UNION
iList3
MULTISET UNION
iList4;
Использование динамического SQL - предположительно для замены различных get_idsN()
функций - может оказаться подходящим вариантом для изучения, но, вероятно, не даст вам много, есличто угодно, на пути улучшения производительности.
Временные таблицы не очень хорошая идея, потому что они работают очень плохо по сравнению с работой в памяти.