Sobes.tech
Назад к вопросам
Middle
10

Что такое BULK COLLECT и FORALL, почему они работают быстрее?

Компании, где спрашивали
МВидео/эльдорадо

Ответ от нейросети

sobes.tech AI

BULK COLLECT и FORALL — это конструкции PL/SQL для эффективной работы с большими объемами данных.

  • BULK COLLECT позволяет загружать сразу множество строк из курсора или запроса в коллекцию за одну операцию, уменьшая количество переключений между SQL и PL/SQL.
  • FORALL выполняет DML-операции (INSERT, UPDATE, DELETE) для всех элементов коллекции за один вызов, вместо цикла с отдельными операциями.

Они работают быстрее, потому что снижают количество контекстных переключений между SQL и PL/SQL, уменьшая накладные расходы на обработку каждой строки по отдельности.

Пример:

DECLARE
  TYPE t_ids IS TABLE OF employees.employee_id%TYPE;
  l_ids t_ids;
BEGIN
  SELECT employee_id BULK COLLECT INTO l_ids FROM employees WHERE department_id = 10;

  FORALL i IN l_ids.FIRST .. l_ids.LAST
    UPDATE employees SET salary = salary * 1.1 WHERE employee_id = l_ids(i);
END;