sql >> Database >  >> RDS >> Oracle

Verzamelingen aaneenschakelen in PLSQL

Als u 10g of hoger gebruikt, kunt u de CONCAT()-functie een beetje efficiënter maken door de MULTISET UNION-operator te gebruiken:

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;

Je zou dingen efficiënter kunnen maken door verschillende arrays in te vullen en vervolgens MULTISET UNION één keer voor allemaal aan te roepen:

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

Dynamische SQL gebruiken - vermoedelijk ter vervanging van de verschillende get_idsN() functies - zou een benadering kunnen zijn die het onderzoeken waard is, maar zal u waarschijnlijk niet veel of niets opleveren op het gebied van verbeterde prestaties.

Tijdelijke tabellen zijn geen goed idee, omdat ze erg slecht presteren in vergelijking met dingen in het geheugen doen.



  1. SQL:AVG met NULL-waarden

  2. waar zijn de DMS-klassebestanden van Oracle?

  3. Geparametriseerde query:controleer of het veld in een reeks waarden in de SELECT-instructie staat

  4. Joins op basis van voorwaarden in meerdere tabellen