Как мне понять были ли удаленны строки delet-ом или строки, которые нужно удалить закончились?
Как мне понять были ли удаленны строки delet-ом или строки, которые нужно удалить закончились. Если строки кончились и delete ничего не удалил, мне нужно выйти из цикла for
begin
for i in 1..100000
loop
delete from BpmsHistoricDetailEntityImpl where id in
(select HD.id from BpmsHistoricDetailEntityImpl HD
inner join BpmsHistoricProcessInstanceEntityImpl HPI on HD.processInstanceId =
HPI.id
where HPI.endTime is not null and HPI.endTime <= sysdate -${depth}
fetch next ${batchSize} rows only);
commit;
end loop;
end;
Мне заранее не известно сколько select вернет строк и batchSize задается пользователем, поэтому, если строк для удаления больше не осталось мне нужно прервать for. Отдельно count искать не хочу, так как итераций может быть много и будут много раз выполняться запросы.
СУБД Oracle 12c.
Ответы (1 шт):
Автор решения: Sergey Bekmambetov
→ Ссылка
begin
loop
delete from BpmsHistoricDetailEntityImpl where id in
(select HD.id from BpmsHistoricDetailEntityImpl HD
inner join BpmsHistoricProcessInstanceEntityImpl HPI on
HD.processInstanceId = HPI.id
where HPI.endTime is not null and HPI.endTime <= sysdate -${depth}
fetch next ${batchSize} rows only);
EXIT WHEN sql%ROWCOUNT = 0;
commit;
end loop;
end;
Сделал так, но может можно быстрее сделать? 10 миллионов записей удаляю, а batchSize размером со 100 тысяч. 100 раз выполняется в итоге данный запрос