W poprzednim wpisie na blogu podałem przykład użycia Oracle Bulk Collect using Cursor Rowtype Type Object. Który najpierw tworzy kursor, a następnie wpisuje obiekt typu kursora, a następnie otwiera kursor, pobiera do zbiorczego zbierania, a następnie przetwarza je za pomocą Forall. Ale czasami możesz być zmuszony do przygotowania niektórych danych tylko jeden raz za pomocą tymczasowego anonimowego bloku PLSQL i nie chcesz pisać zbyt dużo kodu, aby wykonać to zadanie. W przypadku tego rodzaju scenariuszy możesz użyć opcji Wybierz zbiorcze zbieranie do możliwość szybkiego wykonania dowolnego zadania bez marnowania zbyt wiele czasu na pisanie kodu.
Poniżej znajduje się przykład bloku PLSQL, który pobierze rekordy z tabeli EMP i zaktualizuje tabelę BONUS, a także wyświetli się na ekranie.
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;