Анонимный блок за отнятие дубликатов данных || Проверяет наличие дубликатов, а затем удаляет. Но l oop продолжает работать и не останавливается - PullRequest
0 голосов
/ 11 марта 2020

Удаление должно происходить на основе минимального идентификатора последовательности (column -contract_amendment_curr_id), который является уникальным, и повторяющимся полем является cont_amd_id. Таким образом, старый идентификатор seq, который нужно удалить (принимая мин.) Для cont_amd_id

, в запросе 398 дубликатов, а в таблице 900 записей

Но l oop продолжает работать. В oracle мы можем использовать коллекцию для удаления всех записей. Как этого добиться здесь?

DECLARE
CURSOR main_cur IS
SELECT min(contract_amendment_curr_id) rd,cont_amd_id
FROM external.eai_contract_amendment_currency_bkp1
GROUP BY cont_amd_id;
BEGIN
FOR i IN main_cur
LOOP
DELETE FROM external.eai_contract_amendment_currency_bkp1 
WHERE contract_amendment_curr_id=i.rd and cont_amd_id=i.cont_amd_id ;
END LOOP;
commit;
END;

1 Ответ

0 голосов
/ 11 марта 2020

Нет причин для oop здесь.

Вместо:

DELETE FROM external.eai_contract_amendment_currency_bkp1 a 
USING (
    SELECT min(contract_amendment_curr_id) rd ,cont_amd_id
    FROM external.eai_contract_amendment_currency_bkp1
    GROUP BY cont_amd_id
 ) b 
 WHERE a.contract_amendment_curr_id=b.rd and a.cont_amd_id=b.cont_amd_id ;
...