BULK COLLECT vähendab kontekstivahetusi SQL-i ja PL / SQL-i vahel ning võimaldab SQL-i mootoril kirjeid korraga tuua.
Oracle PL / SQL pakub kirjete hulgi toomise funktsionaalsust, mitte ükshaaval toomist. Seda BULK COLLECT-i saab kasutada käsku 'SELECT' kirjete hulgikaubana täitmiseks või kursori hulgihakina toomiseks. Kuna BULK COLLECT tõmbab kirje BULK-is, peaks klausel INTO alati sisaldama kogu tüüpi muutujat. BULK COLLECTi kasutamise peamine eelis on see, et see suurendab jõudlust, vähendades andmebaasi ja PL / SQL-i mootori vastastikust mõju.
Süntaks:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Ülaltoodud süntaksis kasutatakse lausete 'SELECT' ja 'FETCH' andmete kogumiseks funktsiooni BULK COLLECT.
Selles õpetuses saate teada
FORALL klausel
LIMIT klausel
BULK COLLECT atribuudid
FORALL klausel
FORALL võimaldab teostada DML-toiminguid andmetega hulgi. See on sarnane FOR-tsükli avaldusega, välja arvatud FOR-tsüklis juhtuvad asjad rekordtasemel, samas kui FORALL-is pole LOOP-i kontseptsiooni. Selle asemel töödeldakse samal ajal kõiki antud vahemikus olevaid andmeid.
Süntaks:
FORALL in… ;
Ülaltoodud süntaksis viiakse antud DML-toiming läbi kõigi andmete suhtes, mis asuvad madalama ja suurema vahemiku vahel.
LIMIT klausel
Hulgikogumise kontseptsioon laadib kogu andmed sihtkogumise muutujasse lahtiselt, st kogu teave täidetakse kogu muutujaga ühe korraga. Kuid see pole soovitatav, kui kogu laaditav kirje on väga suur, sest kui PL / SQL proovib kogu andmeid laadida, kulutab see rohkem seansimälu. Seetõttu on alati hea piirata selle kogumisoperatsiooni suurust.
Selle suuruse piirangu saab aga hõlpsasti saavutada, kui sisestada ROWNUM tingimus lausesse 'SELECT', kusjuures kursori puhul pole see võimalik.
Selle ületamiseks on Oracle pakkunud klauslit „LIMIT”, mis määratleb hulga hulka kuuluvate kirjete arvu.
Süntaks:
FETCH BULK COLLECT INTO LIMIT ;
Ülaltoodud süntaksis kasutab kursori toomise lause lauset BULK COLLECT koos klausliga LIMIT.
BULK COLLECT atribuudid
Sarnaselt kursori atribuutidele on ka BULK COLLECT-l% BULK_ROWCOUNT (n), mis tagastab FORALL-i lause n- ndas DML-i avalduses mõjutatud ridade arvu , st see annab FORALL-i avalduses mõjutatud kirjete arvu kogu üksiku väärtuse kohta muutuv. Termin n tähistab kogu väärtuse jada, mille jaoks on vaja ridade arvu.
Näide 1 : Selles näites projitseerime BULK COLLECTi abil kogu töötaja nime emp tabelist ja suurendame FORALLi abil ka kõigi töötajate palka 5000 võrra.
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;/