Oracle
 sql >> Database >  >> RDS >> Oracle

Come posso calcolare le righe interessate aggregate se sono presenti query DML multiple nel mio blocco PLSQL?

È possibile registrare i conteggi in una tabella di registrazione generica utilizzando una procedura generica.

Tabella di registrazione

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

Sequenza per ID

create sequence seq_dml_logs ;

Procedura di registrazione

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;
/

Blocco 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;
/

Quindi, aggregazione è semplice.

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

Per identificare meglio che i record appartengono a una particolare corsa o batch, puoi aggiungere un'altra colonna in dml_logs chiamato batch_number . Registra questo numero per identificare le esecuzioni univoche dei tuoi dml e la tua query per ottenere i dettagli aggregati diventi molto più semplice.