Om du använder 10g eller senare kan du göra CONCAT()-funktionen lite mer effektiv genom att använda MULTISET UNION-operatorn:
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;
Du kan göra saker mer effektivt genom att fylla i flera olika arrayer och sedan anropa MULTISET UNION en gång för dem alla:
lConcat := iList1
MULTISET UNION
iList2
MULTISET UNION
iList3
MULTISET UNION
iList4;
Använder dynamisk SQL - förmodligen för att ersätta de olika get_idsN()
funktioner - kan vara ett tillvägagångssätt värt att undersöka, men kommer förmodligen inte att ge dig mycket, om något, i vägen för förbättrad prestanda.
Tillfälliga bord är inte en bra idé, eftersom de presterar mycket dåligt jämfört med att göra saker i minnet.