Evitaría escribir en el sistema de archivos en tiempo DML, pero extraería los datos en un proceso por lotes cada noche (o la frecuencia).
Desde su OP, no está claro si necesita los datos "nuevos" después de la actualización, o los datos "anteriores" antes de la actualización. Si solo quiere los últimos datos, ¿por qué no simplemente agrega un campo de fecha modificada (fecha o tipo de marca de tiempo) y lo actualiza a través de un desencadenador?
create table test
(
id number,
val varchar2(100),
modified_date date default sysdate not null
)
;
CREATE OR REPLACE TRIGGER TR_TEST_BU
BEFORE UPDATE
ON TEST REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
:new.modified_date := sysdate;
end;
insert into test(id, val) values (1, 'Insert 1');
commit;
select * from test;
exec dbms_lock.sleep(5);
update test set val = 'Update 1' where id = 1;
commit;
select * from test;
Si necesita los datos antiguos antes de la actualización (o usted se preocupa por los datos eliminados), entonces se modificará el gatillo para escribir los valores antiguos o eliminados a una tabla de historial, a continuación, extraer los datos desde allí.
También tenga en cuenta que agregar un desencadenador a una tabla ralentizará la actividad DML asociada. Algunas tiendas desean evitar esto reemplazando los factores desencadenantes por reglas de lógica de negocios ("todas las aplicaciones deben actualizar edicion modifed_date"), lo que generalmente conduce a datos inconsistentes (o peores) de lo que he visto.
Es posible que desee utilizar un desencadenante de actualización antes de insertar en una TABLA de registro, y luego extraerlo para procesarlo por lotes (cada noche, lo que sea). Asegúrese de agregar un campo de fecha "fecha de acción" (o marca de tiempo) que luego puede usar para extraer selectivamente los datos en función de cuándo se produjo el ingreso o la subida. – tbone
gracias tbone, esta sería una buena solución. Pero sin cambiar la aplicación, creo que necesito poner un activador de actualización en la tabla y agregar una "última columna de actualización/cambio" adicional para seleccionar tarde en esa columna. ¿O tiene Oracle una función de construcción para esto? – user85155