Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Mutationsauslöser

Wie @San betont, ein Trigger auf Zeilenebene für persons kann die persons generell nicht abfragen Tabelle.

Sie benötigen zwei Trigger, einen Trigger auf Zeilenebene, der das alte und neue Geschlecht sehen kann, und einen Trigger auf Anweisungsebene, der die Zählung durchführen kann. Wenn Sie 11g verwenden, können Sie auch einen zusammengesetzten Trigger mit Blöcken auf Zeilen- und Anweisungsebene erstellen.

create or replace trigger trg_stmt
  after update
  on persons
declare
  l_cnt integer;
begin
  select count(*)
    into l_cnt
    from persons;

  dbms_output.put_line( 'There are now ' || l_cnt || ' rows.' );
end;

create or replace trigger trg_row
  after update
  on persons
  for each row
begin
  if( :new.gender != :old.gender )
  then
    dbms_output.put_line( 'Old gender = ' || :old.gender || ', new gender = ' || :new.gender );
  end if;
end;