BULK COLLECT vermindert contextwisselingen tussen SQL en PL / SQL-engine en stelt de SQL-engine in staat om de records in één keer op te halen.
Oracle PL / SQL biedt de functionaliteit om de records in bulk op te halen in plaats van één voor één op te halen. Deze BULK COLLECT kan worden gebruikt in de 'SELECT'-instructie om de records in bulk te vullen of bij het ophalen van de cursor in bulk. Aangezien de BULK COLLECT het record ophaalt in BULK, moet de INTO-clausule altijd een variabele van het collectietype bevatten. Het belangrijkste voordeel van het gebruik van BULK COLLECT is dat het de prestaties verhoogt door de interactie tussen database en PL / SQL-engine te verminderen.
Syntaxis:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
In de bovenstaande syntaxis wordt BULK COLLECT gebruikt om de gegevens van de 'SELECT'- en' FETCH'-instructie te verzamelen.
In deze tutorial leer je-
FORALL Clausule
LIMIT Clausule
BULK VERZAMEL Attributen
FORALL Clausule
De FORALL maakt het mogelijk om de DML-bewerkingen op gegevens in bulk uit te voeren. Het is vergelijkbaar met dat van de FOR loop-instructie, behalve in FOR-lus dingen gebeuren op recordniveau, terwijl er in FORALL geen LOOP-concept is. In plaats daarvan worden alle gegevens die in het opgegeven bereik aanwezig zijn, tegelijkertijd verwerkt.
Syntaxis:
FORALL in… ;
In de bovenstaande syntaxis wordt de gegeven DML-bewerking uitgevoerd voor alle gegevens die aanwezig zijn tussen het lagere en hogere bereik.
LIMIT Clausule
Het bulkverzamelingsconcept laadt de volledige gegevens in de doelverzamelingsvariabele als een bulk, dwz dat de volledige gegevens in één keer in de verzamelingsvariabele worden ingevuld. Maar dit is niet aan te raden als het totale record dat moet worden geladen erg groot is, omdat wanneer PL / SQL probeert de volledige gegevens te laden, het meer sessiegeheugen in beslag neemt. Daarom is het altijd goed om de omvang van deze bulkophaaloperatie te beperken.
Deze groottelimiet kan echter gemakkelijk worden bereikt door de ROWNUM-voorwaarde in de 'SELECT'-instructie in te voeren, terwijl dit in het geval van cursor niet mogelijk is.
Om dit op te lossen heeft Oracle een 'LIMIT'-clausule voorzien die het aantal records definieert dat in de bulk moet worden opgenomen.
Syntaxis:
FETCH BULK COLLECT INTO LIMIT ;
In de bovenstaande syntaxis gebruikt de instructie cursor fetch de instructie BULK COLLECT samen met de clausule LIMIT.
BULK VERZAMEL Attributen
Vergelijkbaar met cursorattributen heeft BULK COLLECT% BULK_ROWCOUNT (n) dat het aantal rijen retourneert dat is beïnvloed in de n de DML-instructie van de FORALL-instructie, dwz het geeft het aantal records dat is beïnvloed in de FORALL-instructie voor elke afzonderlijke waarde uit de verzameling variabele. De term 'n' geeft de reeks waarden in de verzameling aan, waarvoor het aantal rijen nodig is.
Voorbeeld 1 : In dit voorbeeld zullen we alle werknemersnamen uit de emp-tabel projecteren met behulp van BULK COLLECT en we gaan ook het salaris van alle werknemers verhogen met 5000 met 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;/