Oracle
 sql >> Base de données >  >> RDS >> Oracle

Concaténer des collections en PLSQL

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.