Ако използвате 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()
функции - може да е подход, който си струва да се проучи, но вероятно няма да ви даде много, ако изобщо има нещо, като подобрена производителност.
Временните таблици не са добра идея, защото се представят много зле в сравнение с правенето на неща в паметта.