Si ejecuta las dos declaraciones within a transaction
, cualquier falla hará que tanto la inserción como la actualización se reviertan.
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;
Si hay nuevas filas insertadas en la tabla de origen después de que se hayan leído, es posible que deba ejecutar el bloque nuevamente, con una condición de cambio donde, si corresponde.