Jeśli uruchomisz dwa wyciągi within a transaction
, wszelkie niepowodzenia spowodują wycofanie zarówno wstawiania, jak i aktualizacji.
insert into tgt..
select * from src
where <condition>
and row_status <> 'copied'; --ignoring records after they have been copied once?
update src
set row_status = 'copied'
where <same_where_condition_as_before>
commit;
Jeśli do tabeli źródłowej wstawiono nowe wiersze po ich odczytaniu, może być konieczne ponowne uruchomienie bloku ze zmienionym warunkiem where, jeśli to konieczne.