V předchozím příspěvku na blogu jsem uvedl příklad použití Oracle Bulk Collect pomocí objektu typu kurzorového řádku. Který nejprve vytvoří kurzor, poté napíše objekt typu kurzor a poté kurzor otevře, načte do hromadného sběru a nakonec je zpracuje pomocí Forall. Někdy se ale může stát, že budete muset připravit některá data pouze jednou pomocí dočasného anonymního bloku PLSQL a nechcete psát příliš mnoho kódu, abyste mohli tento úkol provést. Pro tento druh scénářů můžete použít Vybrat Hromadné shromažďování do možnost rychle provést jakýkoli úkol, aniž byste zbytečně ztráceli čas psaním kódu.
Níže je příklad bloku PLSQL, který převezme záznamy z EMP tabulky a aktualizuje tabulku BONUS a také se vytiskne na obrazovku.
SET SEVEROUTPUT ON; DECLARE TYPE t_emp IS TABLE OF emp%ROWTYPE; e_rec t_emp; BEGIN SELECT * BULK COLLECT INTO e_rec FROM emp; FORALL i IN e_rec.FIRST .. e_rec.LAST update bonus set amount = e_rec(i).sal * 15 / 100 where empno = e_rec(i).empno; Commit; FOR i IN e_rec.FIRST .. e_rec.LAST LOOP DBMS_OUTPUT. put_line ( 'Bonus Updated For Employee: ' || e_rec (i).ename || ' ' || 'Bonus: ' || e_rec(i).sal * 15 / 100); END LOOP; END;