Триггер on schema(без указания схемы) не срабатывает для всех схем. Он срабатывает только тогда, когда запускающее действие запускается пользователем, которому принадлежит этот триггер.
Так что они совершенно разные и не взаимозаменяемы.
Вот пример, который устанавливает таблицу журналов и три createтриггера: on databaseи on schemaдля пользователей fooи 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.
Теперь давайте создадим таблицу в fooроссийской схеме foo:
SQL> connect foo/foo
Connected.
SQL> create table foo.foo_stuff (id number);
Table created.
И давайте создадим таблицу в fooроссийской схеме, как bar:
SQL> connect bar/bar
Connected.
SQL> create table foo.bar_stuff (id number);
Table created.
Вот что мы вошли в систему:
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.
Так:
- эти два
create triggerоператора были зарегистрированы "глобальным" after create on databaseтриггером. Этот триггер также записал все остальное.
foo«s after create on schemaвошел создание таблицы, было сделаноfoo
barТриггер регистрировал создание таблицы, которое было выполнено им barсамим, даже несмотря на то, что barсоздал таблицу в fooсхеме.