Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak uzyskać liczbę wierszy, których dotyczy instrukcja, gdy znajduje się w wyzwalaczu tego oświadczenia?

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ODP.Net i EF CodeFirst — błąd zapisu zmian

  2. Doradca ds. kompresji 11gR2 =Zło

  3. Oświadczenie FORALL z dolną i górną granicą w bazie danych Oracle

  4. Korzystanie z Oracle JDeveloper 12c z bazą danych Oracle, część 1

  5. System.Data.OracleClient wymaga oprogramowania klienckiego Oracle w wersji 8.1.7