* Trigger can be created on MV. The MV "FAST" refers to the "incremental" refreshing mechanism, while "ON COMMIT" has to do with the "timing" of the refresh. Just because your trigger on the MV fires whenever you commit on the master table, does not mean the refresh is "FAST" or "incremental". SQL> create table test5 as select * from test1; Table created. SQL> alter table test5 add constraint test5_pk primary key(c1); Table altered. -- Immediately get error if MV log does not exist SQL> create materialized view test5_mv 2 refresh fast on commit 3 as select * from test5; as select * from test5 * ERROR at line 3: ORA-23413: table "JTEST"."TEST5" does not have a materialized view log SQL> create materialized view test5_mv 2 refresh on commit 3 as select * from test5; Materialized view created. SQL> SQL> create or replace trigger test5_trg 2 after insert or update or delete 3 on test5_mv 4 for each row 5 begin 6 if inserting then 7 insert into test5_log values('insert'); 8 elsif deleting then 9 insert into test5_log values('delete'); 10 else 11 insert into test5_log values('update'); 12 end if; 13 end; 14 / Trigger created. SQL> truncate table test5_log; Table truncated. SQL> SQL> select * from test5; C1 C2 C3 ---------- -- -------------------- 1 a row1 2 b test1 row2 SQL> select * from test5_mv; C1 C2 C3 ---------- -- -------------------- 1 a row1 2 b test1 row2 SQL> select * from test5_log; no rows selected SQL> update test5 set c3='row2' where c1=1; 1 row updated. SQL> commit; Commit complete. SQL> select * from test5; C1 C2 C3 ---------- -- -------------------- 1 a row2 2 b test1 row2 SQL> select * from test5_mv; C1 C2 C3 ---------- -- -------------------- 1 a row2 2 b test1 row2 -- Entire MV is deleted, and reloaded from master table SQL> select * from test5_log; LOGSTR ---------- delete delete insert insert -- USER_MVIEWS indicates complete refresh SQL> select last_refresh_date, last_refresh_type from user_mviews where mview_name='TEST5_MV'; LAST_REFRESH_DA LAST_REF --------------- -------- 160403 13:11:29 COMPLETE SQL>