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

Sådan får du antallet af rækker påvirket af et udsagn, når du er inde i det udsagns trigger

En måde er at bruge en global variabel til at spore antallet af rækker, da der ikke er nogen anden måde at få rækkeantallet fra en udløser på et sætningsniveau. Du vil så have brug for tre triggere... et sætningsniveau for at initialisere variablen, før sætningen køres, et rækkeniveau for at tilføje en til variablen for hver række, et sætningsniveau for at bruge rækkeantallet, som du ønsker. Først skal du opsætte variablen og nogle få procedurer til at hjælpe den:

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

Den første trigger til at initialisere variablen:

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

Den anden, der opdateres pr. række:

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

Den tredje til at vise totalen:

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. Konverter VARCHAR2 til tal

  2. Android SQLite Indsæt eller Opdater

  3. Implementering af en multi-datacenter-opsætning til PostgreSQL - Anden del

  4. MySQL GROUP BY adfærd