BULK COLLECT smanjuje prebacivanje konteksta između SQL i PL / SQL mehanizma i omogućuje SQL mehanizmu da odjednom dohvaća zapise.
Oracle PL / SQL pruža funkciju skupnog dohvaćanja zapisa, a ne pojedinačnog. Ovaj BULK COLLECT može se koristiti u naredbi 'SELECT' za popunjavanje zapisa skupno ili za skupno preuzimanje kursora. Budući da BULK COLLECT zapis dohvaća u BULK, klauzula INTO uvijek treba sadržavati varijablu vrste zbirke. Glavna prednost korištenja BULK COLLECT-a je povećanje performansi smanjenjem interakcije između baze podataka i PL / SQL mehanizma.
Sintaksa:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
U gornjoj sintaksi, BULK COLLECT koristi se za prikupljanje podataka iz izraza 'SELECT' i 'FETCH'.
U ovom vodiču naučit ćete-
Klauzula FORALL
Klauzula LIMIT
BULK COLLECT Atributi
Klauzula FORALL
FORALL omogućuje skupno izvršavanje DML operacija na podacima. Slična je onoj u naredbi petlje FOR, osim u petlji FOR stvari se događaju na razini zapisa, dok u FORALLU nema koncepta LOOP. Umjesto toga, istodobno se obrađuju svi podaci prisutni u danom rasponu.
Sintaksa:
FORALL in… ;
U gornjoj sintaksi, zadana DML operacija izvršit će se za sve podatke koji su prisutni između nižeg i višeg raspona.
Klauzula LIMIT
Koncept skupnog prikupljanja učitava cijele podatke u ciljanu varijablu prikupljanja kao skupno, tj. Cjelokupni će podaci biti popunjeni u varijablu prikupljanja jednim potezom. Ali to nije uputno kada je ukupan zapis koji treba učitati vrlo velik, jer kada PL / SQL pokušava učitati cjelokupne podatke, troši više memorije sesije. Stoga je uvijek dobro ograničiti veličinu ove operacije skupljanja rasutih tereta.
Međutim, ovo ograničenje veličine može se lako postići uvođenjem uvjeta ROWNUM u izraz 'SELECT', dok u slučaju kursora to nije moguće.
Da bi prevladao ovo, Oracle je osigurao klauzulu 'LIMIT' koja definira broj zapisa koji trebaju biti uključeni u skupinu.
Sintaksa:
FETCH BULK COLLECT INTO LIMIT ;
U gornjoj sintaksi, naredba preuzimanja kursora koristi naredbu BULK COLLECT zajedno s klauzulom LIMIT.
BULK COLLECT Atributi
Slično atributima kursora BULK COLLECT ima% BULK_ROWCOUNT (n) koji vraća broj redaka pogođenih u n- tom DML izrazu izraza FORALL, tj. Dat će broj zapisa koji su pogođeni u FORALL izrazu za svaku pojedinu vrijednost iz zbirke varijabilna. Izraz 'n' označava slijed vrijednosti u zbirci, za koji je potreban broj redaka.
Primjer 1 : U ovom ćemo primjeru projicirati cijelo ime zaposlenika iz emp tablice pomoću BULK COLLECT, a također ćemo povećati plaću svih zaposlenika za 5000 koristeći 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;/