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;