Jednym ze sposobów jest użycie zmiennej globalnej do śledzenia liczby wierszy, ponieważ nie ma innego sposobu na uzyskanie liczby wierszy z wyzwalacza na poziomie instrukcji. Potrzebne byłyby wtedy trzy wyzwalacze... jeden poziom instrukcji, aby zainicjować zmienną przed uruchomieniem instrukcji, jeden poziom wiersza, aby dodać po jednym do zmiennej dla każdego wiersza, jeden poziom instrukcji, aby wykorzystać liczbę wierszy w dowolny sposób. Najpierw skonfiguruj zmienną i kilka procedur, które w tym pomogą:
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;
/
Pierwszy wyzwalacz do inicjalizacji zmiennej:
create or replace trigger CUSTOMER_CHANGES_TRIGGER_1
before insert or update or delete
on CUSTOMERS
begin
PKG_ROWCOUNT.INIT_ROWCOUNT;
end;
Drugi do aktualizacji na wiersz:
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;
/
Trzeci do wyświetlenia sumy:
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;