sql >> Base de Datos >  >> RDS >> Oracle

Concatenar colecciones en PLSQL

Si está usando 10g o posterior, puede hacer que la función CONCAT() sea un poco más eficiente usando el operador 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;

Podría hacer las cosas más eficientes completando varias matrices diferentes y luego llamando a MULTISET UNION una vez para todas ellas:

   lConcat := iList1 
               MULTISET UNION  
               iList2  
               MULTISET UNION  
               iList3
               MULTISET UNION  
               iList4;  

Usando SQL dinámico, presumiblemente para reemplazar los diversos get_idsN() funciones:podría ser un enfoque que valga la pena investigar, pero probablemente no le dará mucho, si es que le da algo, en la forma de mejorar el rendimiento.

Las tablas temporales no son una buena idea, porque funcionan muy mal en comparación con hacer cosas en la memoria.