Sobes.tech
Назад к вопросам
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 для более эффективной обработки, либо разбивать обновления на меньшие пакеты.