BULK COLLECT reduziert Kontextwechsel zwischen SQL- und PL / SQL-Engine und ermöglicht es der SQL-Engine, die Datensätze sofort abzurufen.
Oracle PL / SQL bietet die Funktionalität, die Datensätze in großen Mengen abzurufen, anstatt sie einzeln abzurufen. Diese BULK COLLECT kann in der Anweisung 'SELECT' verwendet werden, um die Datensätze in großen Mengen zu füllen oder um den Cursor in großen Mengen abzurufen. Da BULK COLLECT den Datensatz in BULK abruft, sollte die INTO-Klausel immer eine Auflistungstypvariable enthalten. Der Hauptvorteil der Verwendung von BULK COLLECT besteht darin, dass die Leistung erhöht wird, indem die Interaktion zwischen Datenbank und PL / SQL-Engine verringert wird.
Syntax:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
In der obigen Syntax wird BULK COLLECT verwendet, um die Daten aus den Anweisungen 'SELECT' und 'FETCH' zu sammeln.
In diesem Tutorial lernen Sie:
FORALL-Klausel
LIMIT-Klausel
BULK COLLECT-Attribute
FORALL-Klausel
Mit FORALL können die DML-Operationen für Daten in großen Mengen ausgeführt werden. Es ähnelt der FOR-Schleifenanweisung, außer dass in der FOR-Schleife Dinge auf Datensatzebene geschehen, während es in FORALL kein LOOP-Konzept gibt. Stattdessen werden alle im angegebenen Bereich vorhandenen Daten gleichzeitig verarbeitet.
Syntax:
FORALL in… ;
In der obigen Syntax wird die angegebene DML-Operation für die gesamten Daten ausgeführt, die zwischen dem unteren und dem oberen Bereich vorhanden sind.
LIMIT-Klausel
Das Bulk-Erfassungskonzept lädt die gesamten Daten als Bulk in die Zielerfassungsvariable, dh die gesamten Daten werden in einem Durchgang in die Erfassungsvariable eingefügt. Dies ist jedoch nicht ratsam, wenn der Gesamtdatensatz, der geladen werden muss, sehr groß ist, da PL / SQL beim Laden der gesamten Daten mehr Sitzungsspeicher benötigt. Daher ist es immer gut, die Größe dieses Massensammelvorgangs zu begrenzen.
Diese Größenbeschränkung kann jedoch leicht erreicht werden, indem die ROWNUM-Bedingung in die 'SELECT'-Anweisung eingefügt wird, während dies im Fall eines Cursors nicht möglich ist.
Um dies zu überwinden, hat Oracle eine 'LIMIT'-Klausel bereitgestellt, die die Anzahl der Datensätze definiert, die in den Bulk aufgenommen werden müssen.
Syntax:
FETCH BULK COLLECT INTO LIMIT ;
In der obigen Syntax verwendet die Cursor-Fetch-Anweisung die BULK COLLECT-Anweisung zusammen mit der LIMIT-Klausel.
BULK COLLECT-Attribute
Ähnlich wie bei den Cursorattributen verfügt BULK COLLECT über% BULK_ROWCOUNT (n), das die Anzahl der betroffenen Zeilen in der n- ten DML-Anweisung der FORALL-Anweisung zurückgibt, dh die Anzahl der in der FORALL-Anweisung betroffenen Datensätze für jeden einzelnen Wert aus der Auflistung angibt Variable. Der Ausdruck 'n' gibt die Wertesequenz in der Sammlung an, für die die Zeilenanzahl benötigt wird.
Beispiel 1 : In diesem Beispiel projizieren wir den gesamten Mitarbeiternamen aus der Tabelle emp mit BULK COLLECT und erhöhen mit FORALL das Gehalt aller Mitarbeiter um 5000.
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;/