Oracle
 sql >> Database >  >> RDS >> Oracle

Collezioni concatenate in PLSQL

Se stai usando 10g o successivo puoi rendere la funzione CONCAT() un po' più efficiente usando l'operatore 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;

Potresti rendere le cose più efficienti popolando diversi array diversi e quindi chiamando MULTISET UNION una volta per tutti:

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

Utilizzo di SQL dinamico, presumibilmente per sostituire i vari get_idsN() funzioni:potrebbe essere un approccio che vale la pena esaminare, ma probabilmente non ti darà molto, se non altro, in termini di prestazioni migliorate.

Le tabelle temporanee non sono una buona idea, perché si comportano molto male rispetto a fare cose in memoria.