Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So erhalten Sie die Anzahl der Zeilen, die von einer Anweisung betroffen sind, wenn Sie sich im Trigger dieser Anweisung befinden

Eine Möglichkeit besteht darin, eine globale Variable zu verwenden, um die Anzahl der Zeilen zu verfolgen, da es keine andere Möglichkeit gibt, die Zeilenanzahl von einem Trigger auf Anweisungsebene abzurufen. Sie würden dann drei Trigger benötigen ... eine Anweisungsebene, um die Variable zu initialisieren, bevor die Anweisung ausgeführt wird, eine Zeilenebene, um der Variablen für jede Zeile eins hinzuzufügen, eine Anweisungsebene, um die Zeilenanzahl beliebig zu verwenden. Richten Sie zuerst die Variable und ein paar Prozeduren zu ihrer Unterstützung ein:

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

Der erste Trigger zum Initialisieren der Variablen:

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

Die Sekunde, die pro Zeile aktualisiert werden soll:

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

Die dritte zur Anzeige der Gesamtsumme:

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;