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

Hvordan kan jeg beregne samlede berørte rækker, hvis der er flere DML-forespørgsler i min PLSQL-blok?

Du kan logge tællingerne i en generisk logningstabel ved hjælp af en generisk procedure.

Logføringstabel

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

Sekvens for id

create sequence seq_dml_logs ;

Logføringsprocedure

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

PL/SQL-blok med 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;
/

Derefter sammenlægning er enkelt.

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

For bedre at kunne identificere, at posterne tilhører en bestemt kørsel eller en batch, kan du tilføje endnu en kolonne i dml_logs kaldet batch_number . Log dette nummer for at identificere unikke kørsler af dine dml'er, og din forespørgsel for at få de samlede detaljer til at blive meget enklere.




  1. Hvad er den tilsvarende syntaks for Outer Apply i PostgreSQL

  2. T-sql - afgør om værdien er heltal

  3. Oracle 12c klient installationsfejl

  4. Visual Basic til applikationer i Microsoft Access