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

Come ottenere il numero di righe interessate da un'istruzione all'interno del trigger di tale istruzione

Un modo consiste nell'utilizzare una variabile globale per tenere traccia del numero di righe poiché non esiste altro modo per ottenere il conteggio delle righe da un trigger a livello di istruzione. Avresti quindi bisogno di tre trigger ... un livello di istruzione per inizializzare la variabile prima che l'istruzione venga eseguita, un livello di riga per aggiungerne uno alla variabile per ogni riga, un livello di istruzione per utilizzare il conteggio delle righe come desideri. Per prima cosa, imposta la variabile e alcune procedure per aiutarla:

create or replace package PKG_ROWCOUNT is
  NUMROWS   number;

  procedure INIT_ROWCOUNT;

  procedure ADD_ONE;

  function GET_ROWCOUNT
    return number;
end PKG_ROWCOUNT;
/

create or replace package body PKG_ROWCOUNT as
  procedure INIT_ROWCOUNT is
  begin
    NUMROWS := 0;
  end;

  procedure ADD_ONE is
  begin
    NUMROWS := Nvl(NUMROWS, 0) + 1;
  end;

  function GET_ROWCOUNT
    return number is
  begin
    return NUMROWS;
  end;
end PKG_ROWCOUNT;
/

Il primo trigger per inizializzare la variabile:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_1
  before insert or update or delete
  on CUSTOMERS
begin
  PKG_ROWCOUNT.INIT_ROWCOUNT;
end;

Il secondo da aggiornare per riga:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_2
  after insert or update or delete
  on CUSTOMERS
  for each row
begin
  PKG_ROWCOUNT.ADD_ONE;
end;
/

Il terzo per visualizzare il totale:

create or replace trigger CUSTOMER_CHANGES_TRIGGER_3
  after insert or update or delete
  on CUSTOMERS
begin
   Dbms_output.
   PUT_LINE(PKG_ROWCOUNT.GET_ROWCOUNT || ' rows were affected.');
end;