Назад к вопросам
Middle
5
Ты упоминал bulk-операции. Расскажи подробнее про связку BULK COLLECT и FORALL.
Компании, где спрашивали
AltDev
Ответ от нейросети
sobes.tech AI
BULK COLLECT и FORALL — это конструкции PL/SQL, которые используются для эффективной обработки больших объёмов данных, минимизируя количество переключений между SQL и PL/SQL.
-
BULK COLLECT позволяет загружать множество строк из SQL-запроса сразу в коллекцию PL/SQL (например, в массив), вместо поочерёдного перебора.
-
FORALL используется для массового выполнения DML-операций (INSERT, UPDATE, DELETE) с использованием коллекций, что значительно ускоряет выполнение по сравнению с циклом, выполняющим отдельные операции.
Пример использования связки:
DECLARE
TYPE t_ids IS TABLE OF employees.employee_id%TYPE;
TYPE t_salaries IS TABLE OF employees.salary%TYPE;
l_ids t_ids;
l_salaries t_salaries;
BEGIN
-- Загружаем данные BULK COLLECT
SELECT employee_id, salary
BULK COLLECT INTO l_ids, l_salaries
FROM employees
WHERE department_id = 10;
-- Обновляем зарплаты с помощью FORALL
FORALL i IN l_ids.FIRST .. l_ids.LAST
UPDATE employees
SET salary = l_salaries(i) * 1.1
WHERE employee_id = l_ids(i);
COMMIT;
END;
Такой подход позволяет:
- Сократить количество переключений между SQL и PL/SQL.
- Существенно повысить производительность при обработке больших наборов данных.
Важно учитывать размер коллекций и использовать параметры LIMIT для управления объемом данных за одну операцию, чтобы избежать переполнения памяти.