Ein Trigger on schema
(ohne angegebenes Schema) wird nicht für alle Schemas ausgelöst . Es wird nur ausgelöst, wenn die auslösende Aktion von dem Benutzer ausgeführt wird, dem dieser Auslöser gehört.
Sie sind also ganz anders und nicht austauschbar.
Hier ist ein Beispiel, das eine Protokollierungstabelle und drei create
Trigger erstellt: on database
und on schema
für Benutzer foo
und bar
:
Connected. -- as mat
SQL> create table mat.log (dt timestamp, who varchar(3),
2 cur varchar(10), own varchar(42), obj varchar(42));
Table created.
SQL> create or replace trigger db_trig
2 after create on database
3 begin
4 insert into mat.log values (systimestamp, 'db', user,
5 ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME);
6 end;
7 /
Trigger created.
SQL> connect foo/foo
Connected.
SQL> create or replace trigger foo_trig
2 after create on schema
3 begin
4 insert into mat.log values (systimestamp, 'foo', user,
5 ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME);
6 end;
7 /
Trigger created.
SQL> connect bar/bar
Connected.
SQL> create or replace trigger bar_trig
2 after create on schema
3 begin
4 insert into mat.log values (systimestamp, 'bar', user,
5 ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME);
6 end;
7 /
Trigger created.
Erstellen wir nun eine Tabelle im foo
Schema wie folgt foo
:
SQL> connect foo/foo
Connected.
SQL> create table foo.foo_stuff (id number);
Table created.
Und erstellen wir eine Tabelle im foo
Schema wie folgt bar
:
SQL> connect bar/bar
Connected.
SQL> create table foo.bar_stuff (id number);
Table created.
Folgendes haben wir protokolliert:
SQL> select * from mat.log order by dt;
DT WHO CUR OWN OBJ
------------------------------ --- ---------- ---------- ---------------
25-NOV-12 07.52.03.797794 PM db FOO FOO FOO_TRIG
25-NOV-12 07.52.03.828670 PM db BAR BAR BAR_TRIG
25-NOV-12 07.52.03.865334 PM foo FOO FOO FOO_STUFF
25-NOV-12 07.52.03.865579 PM db FOO FOO FOO_STUFF
25-NOV-12 07.52.03.894672 PM bar BAR FOO BAR_STUFF
25-NOV-12 07.52.03.894911 PM db BAR FOO BAR_STUFF
6 rows selected.
Damit:
- Die beiden
create trigger
Anweisungen wurden vom "globalen" after create on database
Trigger protokolliert . Dieser Auslöser protokollierte auch alles andere.
foo
‚s after create on schema
protokolliert die Erstellung von Tabellen , die getan wurde vonfoo
bar
's Trigger protokollierte die Tabellenerstellung, die von ihm bar
selbst ausgeführt wurde, obwohl bar
eine Tabelle im foo
Schema erstellt wurde.