BULK COLLECT redukuje kontextové prepínania medzi motorom SQL a PL / SQL a umožňuje motoru SQL načítať záznamy naraz.
Oracle PL / SQL poskytuje funkciu hromadného načítania záznamov namiesto hromadného načítania. Tento HROMADNÝ VÝBER je možné použiť vo vyhlásení 'SELECT' na hromadné vyplnenie záznamov alebo na hromadné načítanie kurzora. Pretože BULK COLLECT načítava záznam v BULK, klauzula INTO by mala vždy obsahovať premennú typu kolekcie. Hlavnou výhodou použitia BULK COLLECT je zvýšenie výkonu znížením interakcie medzi databázou a PL / SQL engine.
Syntax:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Vo vyššie uvedenej syntaxe sa BULK COLLECT používa na zhromažďovanie údajov z príkazov „SELECT“ a „FETCH“.
V tomto návode sa naučíte
FORALL klauzula
LIMITNÁ doložka
Atribúty BULK COLLECT
FORALL klauzula
FORALL umožňuje hromadne vykonávať operácie DML s údajmi. Je to podobné ako v prípade príkazu FOR loop, až na to, že v cykloch FOR sa veci dejú na úrovni záznamu, zatiaľ čo vo FORALL neexistuje koncept LOOP. Namiesto toho sa súčasne spracúvajú všetky údaje nachádzajúce sa v danom rozsahu.
Syntax:
FORALL in… ;
Vo vyššie uvedenej syntaxi sa daná operácia DML vykoná pre všetky údaje, ktoré sú prítomné medzi nižším a vyšším rozsahom.
LIMITNÁ doložka
Koncept hromadného zhromažďovania načíta všetky údaje do cieľovej premennej zhromažďovania ako hromadné, tj. Všetky údaje sa naraz naplnia do premennej zhromažďovania. Ale to sa neodporúča, keď je celkový záznam, ktorý je potrebné načítať, veľmi veľký, pretože keď sa PL / SQL pokúša načítať celé údaje, spotrebuje to viac pamäte relácie. Preto je vždy dobré obmedziť veľkosť tejto operácie hromadného zberu.
Tento limit veľkosti je však možné ľahko dosiahnuť zavedením podmienky ROWNUM do príkazu „SELECT“, zatiaľ čo v prípade kurzora to nie je možné.
Na prekonanie tohto problému spoločnosť Oracle poskytla doložku „LIMIT“, ktorá definuje počet záznamov, ktoré je potrebné zahrnúť hromadne.
Syntax:
FETCH BULK COLLECT INTO LIMIT ;
Vo vyššie uvedenej syntaxi používa príkaz na vyzdvihnutie kurzora príkaz BULK COLLECT spolu s klauzulou LIMIT.
Atribúty BULK COLLECT
Podobne ako atribúty kurzora BULK COLLECT má% BULK_ROWCOUNT (n), ktorý vracia počet ovplyvnených riadkov v n- tom vyhlásení DML príkazu FORALL, tj poskytne počet záznamov ovplyvnených v príkaze FORALL pre každú jednu hodnotu z kolekcie premenná. Výraz „n“ označuje postupnosť hodnôt v kolekcii, pre ktorú je potrebný počet riadkov.
Príklad 1 : V tomto príklade premietneme celé meno zamestnanca z tabuľky emp pomocou programu BULK COLLECT a tiež pomocou programu FORALL zvýšime plat všetkých zamestnancov o 5 000.
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;/