BULK COLLECT reducerer kontekstskifter mellem SQL og PL / SQL-motor og giver SQL-motor mulighed for at hente poster på én gang.
Oracle PL / SQL giver funktionaliteten til at hente poster i bulk frem for at hente en efter en. Denne BULK COLLECT kan bruges i 'SELECT' -erklæringen til at udfylde poster i bulk eller til at hente markøren i bulk. Da BULK COLLECT henter posten i BULK, skal INTO-klausulen altid indeholde en samlingstypevariabel. Den største fordel ved at bruge BULK COLLECT er, at det øger ydeevnen ved at reducere interaktionen mellem database og PL / SQL-motor.
Syntaks:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
I ovenstående syntaks bruges BULK COLLECT til at indsamle data fra 'SELECT' og 'FETCH' udsagn.
I denne vejledning lærer du-
FORALL klausul
LIMIT-klausul
BULK COLLECT attributter
FORALL klausul
FORALL giver mulighed for at udføre DML-operationer på massedata. Det svarer til FOR-loop-sætningen undtagen i FOR-loop sker der ting på rekordniveau, mens der i FORALL ikke er noget LOOP-koncept. I stedet behandles alle data, der er til stede i det givne interval på samme tid.
Syntaks:
FORALL in… ;
I ovenstående syntaks udføres den givne DML-operation for hele data, der findes mellem lavere og højere område.
LIMIT-klausul
Bulk indsamlingskonceptet indlæser hele data i målopsamlingsvariablen som en bulk, dvs. hele dataene udfyldes i samlingsvariablen på en gang. Men dette tilrådes ikke, når den samlede post, der skal indlæses, er meget stor, for når PL / SQL forsøger at indlæse hele dataene, bruger den mere sessionhukommelse. Derfor er det altid godt at begrænse størrelsen på denne bulkopsamlingsoperation.
Denne størrelsesgrænse kan dog let opnås ved at indføre ROWNUM-tilstanden i 'SELECT' -erklæringen, hvorimod det ikke er muligt i tilfælde af markør.
For at overvinde dette har Oracle leveret 'LIMIT' klausul, der definerer antallet af poster, der skal inkluderes i bulk.
Syntaks:
FETCH BULK COLLECT INTO LIMIT ;
I ovenstående syntaks bruger markørhentningssætningen BULK COLLECT-sætning sammen med LIMIT-klausulen.
BULK COLLECT attributter
Svarende til markøren attributter BULK COLLECT har% BULK_ROWCOUNT (n), som returnerer antallet af rækker ramt i n th DML opgørelse af FORALL erklæring, dvs. det vil give optællingen af poster påvirkes i FORALL opgørelse for hver enkelt værdi fra samlingen variabel. Udtrykket 'n' angiver rækkefølgen af værdi i samlingen, hvor rækkeoptællingen er nødvendig.
Eksempel 1 : I dette eksempel projicerer vi hele medarbejdernavnet fra emp-tabellen ved hjælp af BULK COLLECT, og vi øger også lønnen til alle medarbejderne med 5000 ved hjælp af 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;/