Tôi không biết tại sao bạn lại gặp lỗi từ đồng nghĩa. Nhưng đó là rất nhiều mã cho một cái gì đó phải là một câu lệnh DELETE duy nhất. Tôi giả sử bạn đã thay đổi nó thành commit-every-n để tránh lỗi khôi phục. Sẽ thật tuyệt nếu bạn có thể sử dụng DBA để tăng không gian hoàn tác để bạn thực sự có thể thực hiện công việc mình cần làm. Không làm được điều đó, tôi nghĩ bạn vẫn có thể làm cho nó đơn giản hơn nhiều:
LOOP
DELETE FROM log_master
WHERE last_changed_date < :purge_date
AND event_id = :event_id
AND rownum <= :batch_delete_limit
USING purge_date, event_id, l_bulk_collect_limit;
EXIT WHEN SQL%NOTFOUND;
END LOOP;
Và bạn có thể thử lại logic của mình nếu bạn muốn.
Xin lỗi nếu tôi đã bỏ qua một số điều tế nhị khiến điều này khác với những gì bạn đang làm.