BULK COLLECT snižuje kontextové přepínání mezi SQL a PL / SQL strojem a umožňuje stroji SQL načítat záznamy najednou.
Oracle PL / SQL poskytuje funkce hromadného načítání záznamů, nikoli načítání jeden po druhém. Tento BULK COLLECT lze použít v příkazu 'SELECT' k hromadnému naplnění záznamů nebo hromadnému načítání kurzoru. Protože BULK COLLECT načte záznam v BULK, klauzule INTO by měla vždy obsahovat proměnnou typu kolekce. Hlavní výhodou použití BULK COLLECT je zvýšení výkonu snížením interakce mezi databází a PL / SQL strojem.
Syntax:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Ve výše uvedené syntaxi se při shromažďování dat z příkazů 'SELECT' a 'FETCH' používá BULK COLLECT.
V tomto výukovém programu se naučíte-
FORALL klauzule
LIMITNÍ doložka
Atributy BULK COLLECT
FORALL klauzule
FORALL umožňuje hromadné provádění operací DML s daty. Je to podobné jako u příkazu smyčky FOR, s výjimkou smyčky FOR, co se děje na úrovni záznamu, zatímco ve FORALL neexistuje koncept LOOP. Místo toho jsou všechna data přítomná v daném rozsahu zpracovávána současně.
Syntax:
FORALL in… ;
Ve výše uvedené syntaxi bude daná operace DML provedena pro všechna data, která jsou přítomna mezi nižším a vyšším rozsahem.
LIMITNÍ doložka
Koncept hromadného sběru načte všechna data do cílové proměnné sběru jako hromadný, tj. Celá data se najednou naplní do proměnné sběru. Ale to se nedoporučuje, když je celkový záznam, který je třeba načíst, velmi velký, protože když se PL / SQL pokusí načíst celá data, spotřebuje více paměti relace. Proto je vždy dobré omezit velikost této operace hromadného sběru.
Tohoto limitu velikosti však lze snadno dosáhnout zavedením podmínky ROWNUM do příkazu 'SELECT', zatímco v případě kurzoru to není možné.
K překonání tohoto problému poskytla společnost Oracle klauzuli „LIMIT“, která definuje počet záznamů, které je třeba hromadně zahrnout.
Syntax:
FETCH BULK COLLECT INTO LIMIT ;
Ve výše uvedené syntaxi používá příkaz načtení kurzoru příkaz BULK COLLECT spolu s klauzulí LIMIT.
Atributy BULK COLLECT
Podobně jako u kurzoru atributy BULK má COLLECT% BULK_ROWCOUNT (n), která vrací počet řádků ovlivněných v n -tého DML prohlášení výkazu forall, to znamená, že bude dávat počet záznamů ovlivněny ve výkazu forall pro každou hodnotu z kolekce proměnná. Termín „n“ označuje posloupnost hodnoty v kolekci, pro kterou je potřeba počet řádků.
Příklad 1 : V tomto příkladu promítneme celé jméno zaměstnance z emp tabulky pomocí BULK COLLECT a také pomocí FORALL zvýšíme plat všech zaměstnanců o 5000.
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;/