sql >> Databasteknik >  >> RDS >> Oracle

Hur kan jag beräkna sammanlagda påverkade rader om det finns flera DML-frågor i mitt PLSQL-block?

Du kan logga räkningarna i en generisk loggningstabell med en generisk procedur.

Loggningstabell

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

Sekvens för id

create sequence seq_dml_logs ;

Loggningsprocedur

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

Sedan aggregering är enkelt.

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

För att bättre identifiera att posterna tillhör en viss körning eller en batch kan du lägga till ytterligare en kolumn i dml_logs kallas batch_number . Logga det här numret för att identifiera unika körningar av dina dmls och din fråga för att få de samlade detaljerna blir mycket enklare.




  1. Är det möjligt att använda resultatet av en SQL-funktion som ett fält i Doctrine?

  2. hur sparar man data som användaren matar in på formulärsidan efter att skriptet körts?

  3. Få en MySQL-grupp efter fråga för att visa raden i den gruppen med det högsta värdet

  4. FEL 1356 (HY000):Visa "mysql.user"-referenser ogiltiga tabell(er) eller kolumn(er) eller funktion(er) eller definierare/anropare saknar rättigheter att använda dem