Назад к вопросам
Middle
11
BEGIN LOOP UPDATE table SET status = 'PROCESSED' WHERE category = 'OLD' AND ROWNUM <= 50000; EXIT WHEN SQL%NOTFOUND; COMMIT; END LOOP;
Компании, где спрашивали
flank bank
Ответ от нейросети
sobes.tech AI
Этот код — пример PL/SQL цикла для пакетного обновления строк в таблице с ограничением по количеству обновляемых записей за итерацию.
Объяснение:
- Цикл обновляет до 50000 строк с категорией 'OLD', устанавливая статус 'PROCESSED'.
- После каждой итерации выполняется COMMIT, чтобы зафиксировать изменения.
- Цикл завершается, когда обновить больше нечего (SQL%NOTFOUND).
Такой подход помогает избежать блокировок и переполнения undo/redo логов при обновлении большого объема данных.
Пример улучшения — использовать BULK COLLECT и LIMIT для более эффективной обработки, либо разбивать обновления на меньшие пакеты.