A BULK COLLECT csökkenti a kontextusváltást az SQL és a PL / SQL motor között, és lehetővé teszi az SQL motor számára a rekordok egyszerre történő letöltését.
Az Oracle PL / SQL a rekordok tömeges lekérésének funkcióját nyújtja, nem pedig egyenként. Ez a BULK COLLECT felhasználható a 'SELECT' utasításban a rekordok tömeges feltöltésére vagy a kurzor tömeges lekérésére. Mivel a BULK COLLECT lekéri a rekordot BULK-ban, az INTO záradéknak mindig tartalmaznia kell egy gyűjteménytípus változót. A BULK COLLECT használatának fő előnye, hogy növeli a teljesítményt azáltal, hogy csökkenti az adatbázis és a PL / SQL motor közötti kölcsönhatást.
Szintaxis:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
A fenti szintaxisban a BULK COLLECT-et használják a 'SELECT' és a 'FETCH' utasítás adatainak összegyűjtéséhez.
Ebben az oktatóanyagban megtanulja-
FORALL záradék
LIMIT záradék
BULK COLLECT attribútumok
FORALL záradék
A FORALL lehetővé teszi a DML műveletek tömeges végrehajtását az adatokon. Hasonló a FOR ciklus utasításához, kivéve a FOR ciklusban, a dolgok rekord szinten történnek, míg a FORALL-ban nincs LOOP koncepció. Ehelyett az adott tartományban lévő teljes adat egyidejűleg kerül feldolgozásra.
Szintaxis:
FORALL in… ;
A fenti szintaxisban az adott DML műveletet az alacsonyabb és a magasabb tartomány közötti teljes adatra végrehajtjuk.
LIMIT záradék
A tömeges gyűjtési koncepció a teljes adatot tömegesen tölti be a célgyűjtési változóba, vagyis a teljes adat egyszeri feltöltéssel kerül be a gyűjtési változóba. De ez nem tanácsos, ha a betöltendő teljes rekord nagyon nagy, mert amikor a PL / SQL megpróbálja betölteni a teljes adatot, több munkamemória fogyaszt. Ezért mindig jó korlátozni ennek a tömeges gyűjtési műveletnek a méretét.
Ez a méretkorlát azonban könnyen elérhető a ROWNUM feltétel bevitelével a 'SELECT' utasításba, míg a kurzor esetében ez nem lehetséges.
Ennek kiküszöbölése érdekében az Oracle egy „LIMIT” záradékot adott, amely meghatározza az ömlesztve felvenni kívánt rekordok számát.
Szintaxis:
FETCH BULK COLLECT INTO LIMIT ;
A fenti szintaxisban a kurzorletöltési utasítás a BULK COLLECT utasítást használja a LIMIT záradékkal együtt.
BULK COLLECT attribútumok
Hasonlóan a kurzorattribútumokhoz, a BULK COLLECT% BULK_ROWCOUNT (n) értékkel rendelkezik, amely visszaadja a FORALL utasítás n- edik DML utasításában érintett sorok számát , vagyis megadja a FORALL utasításban érintett rekordok számát a gyűjtemény minden egyes értékéhez változó. Az 'n' kifejezés a gyűjtemény azon értékének sorrendjét jelöli, amelyhez sorszámra van szükség.
1. példa : Ebben a példában a BULK COLLECT használatával kivetítjük az összes alkalmazott nevét az emp táblázatból, és a FORALL használatával emelni fogjuk az összes alkalmazott fizetését 5000-tel.
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;/