BULK COLLECT reduserer kontekstbytter mellom SQL og PL / SQL-motor og lar SQL-motoren hente postene på en gang.
Oracle PL / SQL tilbyr funksjonaliteten til å hente postene i bulk i stedet for å hente en etter en. Denne BULK COLLECT kan brukes i 'SELECT' -uttalelse for å fylle ut postene i bulk eller for å hente markøren i bulk. Siden BULK COLLECT henter posten i BULK, bør INTO-leddet alltid inneholde en variabel for samlingstypen. Den største fordelen med å bruke BULK COLLECT er at den øker ytelsen ved å redusere samspillet mellom database og PL / SQL-motor.
Syntaks:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
I ovennevnte syntaks brukes BULK COLLECT til å samle inn data fra 'SELECT' og 'FETCH' statement.
I denne veiledningen vil du lære-
FORALL Klausul
LIMIT Klausul
BULK COLLECT Attributter
FORALL Klausul
FORALL tillater å utføre DML-operasjoner på bulkdata. Det ligner på FOR-loop-setningen bortsett fra i FOR-loop skjer ting på rekordnivå mens det i FORALL ikke er noe LOOP-konsept. I stedet behandles hele dataene i det gitte området samtidig.
Syntaks:
FORALL in… ;
I den ovennevnte syntaksen vil den gitte DML-operasjonen bli utført for hele dataene som er tilstede mellom lavere og høyere område.
LIMIT Klausul
Massesamlingskonseptet laster hele dataene inn i målsamlingsvariabelen som en bulk, dvs. at hele dataene blir fylt ut i samlingsvariabelen på en gang. Men dette er ikke tilrådelig når den totale posten som må lastes er veldig stor, for når PL / SQL prøver å laste inn hele dataen, bruker den mer øktminne. Derfor er det alltid bra å begrense størrelsen på denne samleoperasjonen.
Imidlertid kan denne størrelsesgrensen lett oppnås ved å innføre ROWNUM-tilstanden i 'SELECT' -uttalelsen, mens det i tilfelle markør ikke er mulig.
For å overvinne dette har Oracle gitt 'LIMIT' klausul som definerer antall poster som må inkluderes i bulk.
Syntaks:
FETCH BULK COLLECT INTO LIMIT ;
I den ovennevnte syntaksen bruker markørhentingsuttalelsen BULK COLLECT-setning sammen med LIMIT-setningen.
BULK COLLECT Attributter
I likhet med markøren attributter BULK har COLLECT% BULK_ROWCOUNT (n) som returnerer antall rader som påvirkes i n th DML utsagn av FORALL uttalelse, dvs. det vil gi tellingen av poster som berøres i FORALL regnskapet for hver enkelt verdi fra samlingen variabel. Begrepet 'n' indikerer rekkefølgen av verdi i samlingen, som det er behov for radtelling.
Eksempel 1 : I dette eksemplet vil vi projisere alt ansattens navn fra emp-tabellen ved hjelp av BULK COLLECT, og vi skal også øke lønnen til alle de ansatte med 5000 ved hjelp av 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;/