sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo puedo calcular las filas afectadas agregadas si hay una consulta DML múltiple en mi bloque PLSQL?

Puede registrar los recuentos en una tabla de registro genérica utilizando un procedimiento genérico.

Tabla de registro

CREATE TABLE dml_logs (
     log_id      NUMBER PRIMARY KEY,
     step        VARCHAR2(200),
     row_count   NUMBER,
     log_date    DATE
);

Secuencia para id

create sequence seq_dml_logs ;

Procedimiento de registro

CREATE OR REPLACE PROCEDURE log_dml (
     p_step        VARCHAR2,
     p_row_count   NUMBER,
     p_log_date    DATE
) IS
     PRAGMA autonomous_transaction;
BEGIN
     INSERT INTO dml_logs (
          log_id,
          step,
          row_count,
          log_date
     ) VALUES (
          seq_dml_logs.NEXTVAL,
          p_step,
          p_row_count,
          p_log_date
     );
     COMMIT;
END;
/

Bloque PL/SQL con DML

DECLARE
v_step dml_logs.step%TYPE;
BEGIN

  v_step := 'cust_temp_a_update';
   UPDATE cust_temp_a SET name = 'new_val' WHERE id = 10;

 log_dml(v_step,SQL%ROWCOUNT,SYSDATE);

 v_step := 'cust_temp_b_update';
   UPDATE cust_temp_b SET name = 'new_val' WHERE id = 20;

 log_dml(v_step,SQL%ROWCOUNT,SYSDATE);
END;
/

Luego, agregación es sencillo.

select SUM(row_count) FROM dml_logs 
where step = ? and log_date = ? -- all the required conditions.

Para identificar mejor que los registros pertenecen a una ejecución o un lote en particular, puede agregar otra columna en dml_logs llamado batch_number . Registre este número para identificar ejecuciones únicas de sus dml y su consulta para que los detalles agregados sean mucho más simples.