BULK COLLECT reduce comutările de context între motorul SQL și PL / SQL și permite motorului SQL să preia înregistrările simultan.
Oracle PL / SQL oferă funcționalitatea de a prelua înregistrările în bloc decât de a prelua unul câte unul. Această BULK COLLECT poate fi utilizată în instrucțiunea „SELECT” pentru a completa înregistrările în bloc sau pentru a prelua cursorul în bloc. Deoarece BULK COLLECT preia înregistrarea în BULK, clauza INTO ar trebui să conțină întotdeauna o variabilă de tip colecție. Principalul avantaj al utilizării BULK COLLECT este că crește performanța prin reducerea interacțiunii dintre baza de date și motorul PL / SQL.
Sintaxă:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
În sintaxa de mai sus, BULK COLLECT este utilizat în colectarea datelor din instrucțiunile „SELECT” și „FETCH”.
În acest tutorial veți învăța-
Clauza FORALL
Clauza LIMITĂ
BULK COLLECT Atribute
Clauza FORALL
FORALL permite efectuarea operațiunilor DML pe date în bloc. Este similar cu cel al instrucțiunii de buclă FOR, cu excepția celor din bucla FOR, lucrurile se întâmplă la nivel de înregistrare, în timp ce în FORALL nu există un concept LOOP. În schimb, toate datele prezente în intervalul dat sunt procesate în același timp.
Sintaxă:
FORALL in… ;
În sintaxa de mai sus, operația DML dată va fi executată pentru toate datele care sunt prezente între intervalul inferior și superior.
Clauza LIMITĂ
Conceptul de colectare în bloc încarcă toate datele în variabila de colectare țintă ca bloc, adică toate datele vor fi populate în variabila de colectare într-o singură trecere. Dar acest lucru nu este recomandabil atunci când înregistrarea totală care trebuie încărcată este foarte mare, deoarece atunci când PL / SQL încearcă să încarce toate datele, consumă mai multă memorie de sesiune. Prin urmare, este întotdeauna bine să limitați dimensiunea acestei operațiuni de colectare în bloc.
Cu toate acestea, această limită de dimensiune poate fi ușor atinsă prin introducerea condiției ROWNUM în instrucțiunea „SELECT”, în timp ce în cazul cursorului acest lucru nu este posibil.
Pentru a depăși acest Oracle a furnizat clauza „LIMIT” care definește numărul de înregistrări care trebuie incluse în bloc.
Sintaxă:
FETCH BULK COLLECT INTO LIMIT ;
În sintaxa de mai sus, instrucțiunea de preluare a cursorului utilizează instrucțiunea BULK COLLECT împreună cu clauza LIMIT.
BULK COLLECT Atribute
Similar cu atributele cursorului BULK COLLECT are% BULK_ROWCOUNT (n) care returnează numărul de rânduri afectate în instrucțiunea a DML a instrucțiunii FORALL, adică va da numărul de înregistrări afectate în instrucțiunea FORALL pentru fiecare valoare din colecție variabil. Termenul „n” indică secvența valorii din colecție, pentru care este necesar numărul de rânduri.
Exemplul 1 : În acest exemplu, vom proiecta toate numele angajaților din tabelul emp folosind BULK COLLECT și, de asemenea, vom crește salariul tuturor angajaților cu 5000 folosind 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;/