sql >> Database >  >> RDS >> Oracle

Hoe het aantal rijen te krijgen dat wordt beïnvloed door een instructie wanneer deze zich binnen de trigger van die instructie bevindt?

Eén manier is om een ​​globale variabele te gebruiken om het aantal rijen bij te houden, aangezien er geen andere manier is om het aantal rijen op te halen uit een trigger op instructieniveau. Je hebt dan drie triggers nodig... één instructieniveau om de variabele te initialiseren voordat de instructie wordt uitgevoerd, één rijniveau om er een toe te voegen aan de variabele voor elke rij, één instructieniveau om het aantal rijen te gebruiken zoals u dat wilt. Stel eerst de variabele in en een paar procedures om het te helpen:

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

De eerste trigger om de variabele te initialiseren:

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

De tweede die per rij wordt bijgewerkt:

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

De derde die het totaal weergeeft:

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;


  1. Schakel waarschuwingen en fouten uit in PHP en MySQL

  2. Grondbeginselen van tabeluitdrukkingen, deel 2 – Afgeleide tabellen, logische overwegingen

  3. Snapshot-replicatie maken

  4. Zijn query's van het SELECT-type het enige type dat kan worden genest?