Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Concatenando coleções em PLSQL


Se você estiver usando 10g ou posterior, poderá tornar a função CONCAT() um pouco mais eficiente usando o 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;

Você pode tornar as coisas mais eficientes preenchendo vários arrays diferentes e, em seguida, chamando MULTISET UNION uma vez para todos eles:
   lConcat := iList1 
               MULTISET UNION  
               iList2  
               MULTISET UNION  
               iList3
               MULTISET UNION  
               iList4;  

Usando SQL dinâmico - presumivelmente para substituir os vários get_idsN() funções - pode ser uma abordagem que vale a pena investigar, mas provavelmente não lhe dará muito, se alguma coisa, em termos de desempenho aprimorado.

Tabelas temporárias não são uma boa ideia, porque têm um desempenho muito ruim em comparação com fazer coisas na memória.