sql >> Database >  >> RDS >> Oracle

Hoe kan ik de totale betrokken rijen berekenen als er meerdere DML-query's in mijn PLSQL-blok staan?

U kunt de tellingen loggen in een generieke logtabel met behulp van een generieke procedure.

Logtabel

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

Volgorde voor id

create sequence seq_dml_logs ;

Logprocedure

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

Vervolgens aggregatie is eenvoudig.

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

Om beter te kunnen identificeren dat de records bij een bepaalde run of batch horen, kunt u een andere kolom toevoegen in de dml_logs genaamd batch_number . Log dit nummer in om unieke uitvoeringen van uw dml's te identificeren en uw zoekopdracht om de geaggregeerde details te krijgen, wordt veel eenvoudiger.




  1. Hoe voer ik een LEFT JOIN in SQL Server uit tussen twee SELECT-instructies?

  2. Een ouder op het hoogste niveau vinden in SQL

  3. Python/Flask:hoe weet ik hoe lang een gebruiker op een pagina doorbrengt? (App voor gegevensinvoer / tijdlogboek)

  4. Eenvoudige CRUD-tutorial over Play Framework en MySQL met Ebean?