BULK COLLECT minskar sammanhangsväxlar mellan SQL och PL / SQL-motorn och gör att SQL-motorn kan hämta posterna på en gång.
Oracle PL / SQL tillhandahåller funktionaliteten för att hämta poster i bulk snarare än att hämta en efter en. Denna BULK COLLECT kan användas i 'VÄLJ' uttalande för att fylla i poster i bulk eller för att hämta markören i bulk. Eftersom BULK COLLECT hämtar posten i BULK bör INTO-satsen alltid innehålla en samlingstypvariabel. Den största fördelen med att använda BULK COLLECT är att den ökar prestandan genom att minska interaktionen mellan databasen och PL / SQL-motorn.
Syntax:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
I ovanstående syntax används BULK COLLECT för att samla in data från 'SELECT' och 'FETCH' uttalanden.
I denna handledning lär du dig-
FORALL klausul
GRÄNSKlausul
BULK COLLECT-attribut
FORALL klausul
FORALL gör det möjligt att utföra DML-operationer på bulkdata. Det liknar det för FOR-loop-uttalande förutom i FOR-loop händer saker på rekordnivå medan det i FORALL inte finns något LOOP-koncept. Istället behandlas hela data som finns i det givna intervallet samtidigt.
Syntax:
FORALL in… ;
I ovanstående syntax kommer den givna DML-operationen att utföras för hela data som finns mellan lägre och högre intervall.
GRÄNSKlausul
Masskollektionskonceptet laddar hela data i målsamlingsvariabeln som en bulk, dvs. hela data kommer att fyllas i samlingsvariabeln på en gång. Men detta är inte tillrådligt när den totala posten som behöver laddas är mycket stor, för när PL / SQL försöker ladda hela data så förbrukar det mer sessionsminne. Därför är det alltid bra att begränsa storleken på denna bulkuppsamlingsoperation.
Denna storleksgräns kan emellertid lätt uppnås genom att införa ROWNUM-villkoret i "SELECT" -uttrycket, medan det inte är möjligt med markören.
För att övervinna detta har Oracle tillhandahållit 'LIMIT' -klausul som definierar antalet poster som måste ingå i bulk.
Syntax:
FETCH BULK COLLECT INTO LIMIT ;
I ovanstående syntax använder markörhämtningsuttalandet BULK COLLECT-sats tillsammans med LIMIT-satsen.
BULK COLLECT-attribut
Liknar markörattribut BULK COLLECT har% BULK_ROWCOUNT (n) som returnerar antalet rader som påverkas i den n: e DML-satsen i FORALL-satsen, dvs det kommer att ge antalet poster som påverkas i FORALL-satsen för varje enskilt värde från samlingen variabel. Termen 'n' indikerar sekvensen för värde i samlingen, för vilken radantalet behövs.
Exempel 1 : I det här exemplet projicerar vi alla anställdas namn från EMP-tabellen med hjälp av BULK COLLECT och vi kommer också att öka lönen för alla anställda med 5000 med FORALL.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/