Это не так, как работают курсоры, вам придется хранить значения в какой-то коллекции.
Ваш текущий запрос получает 5000 случайных строк из Table_1
и удаляет строки, которые также существуют в 5000 случайных строк, выбранных из Table_2
.
Вы пытались сделать это без MINUS
?
Как я понимаю, запрос должен выдать то же, что и этот:
Select a.head, a.effective_date,
From table_1 a
Left Join table_2 b On (b.head = a.head And b.effective_date = a.effective_date )
Where a.type_of_action='6' And a.effective_date >= ADD_MONTHS(SYSDATE,-15)
And b.head Is Null;
Наличие составного индекса на TABLE_1 (type_of_action, head, effective_date)
и TABLE_2 (head, effective_date)
должно помочь вам с производительностью.