Jika Anda menggunakan 10g atau lebih baru, Anda dapat membuat fungsi CONCAT() sedikit lebih efisien dengan menggunakan operator 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;
Anda dapat membuat segalanya lebih efisien dengan mengisi beberapa array yang berbeda dan kemudian memanggil MULTISET UNION sekali untuk semuanya:
lConcat := iList1
MULTISET UNION
iList2
MULTISET UNION
iList3
MULTISET UNION
iList4;
Menggunakan SQL dinamis - mungkin untuk menggantikan berbagai get_idsN()
fungsi - mungkin merupakan pendekatan yang perlu diselidiki, tetapi mungkin tidak akan memberi Anda banyak, jika ada, dalam hal peningkatan kinerja.
Tabel sementara bukanlah ide yang baik, karena kinerjanya sangat buruk dibandingkan dengan melakukan sesuatu di memori.