sql >> Databáze >  >> RDS >> Oracle

Jak mohu vypočítat agregované ovlivněné řádky, pokud je v mém bloku PLSQL více dotazů DML?

Počty můžete zaznamenat do obecné tabulky protokolování pomocí obecné procedury.

Tabulka protokolování

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

Sekvence pro id

create sequence seq_dml_logs ;

Postup protokolování

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

Poté agregace je jednoduchý.

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

Abyste lépe identifikovali, že záznamy patří ke konkrétnímu běhu nebo dávce, můžete přidat další sloupec do dml_logs s názvem batch_number . Zaznamenejte toto číslo, abyste identifikovali jedinečná spuštění vašich dmls a váš dotaz, abyste získali souhrnné podrobnosti mnohem jednodušší.




  1. Hibernace:Vytvořte index

  2. SQLite COUNT

  3. Jak se připojit k localhost pomocí postgres_fdw?

  4. Funkce PHP pro únik ze syntaxe regulárního výrazu MySQL