В предишната публикация в блога дадох пример за използване на Oracle Bulk Collect, използвайки Cursor Rowtype Type Object. Което първо създава курсора, след това въвежда обект от тип курсор и след това отваря курсора, извличайки в групово събиране и след това накрая ги обработва с помощта на Forall. Но понякога може да се наложи да подготвите някои данни само за един път с временен анонимен PLSQL блок и не искате да пишете твърде много код, за да изпълните тази задача. За този вид сценарии можете да използвате Изберете групово събиране в опция за бързо изпълнение на всяка задача, без да губите твърде много време за писане на код.
По-долу е даден примерът на PLSQL блок, който ще вземе записите от таблицата EMP и ще актуализира таблицата BONUS и също така ще отпечата на екрана.
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;