A quick demonstration of a Materialized View that is refreshed ON COMMIT.
SQL> create table source_table
2 as select rownum as source_pk, dbms_random.string('X',15) as col_2, sysdate-1000+rownum as col_3
3 from dual connect by level < 1001
SQL> alter table source_table add constraint source_pk primary key (source_pk);
SQL> create materialized view my_mv refresh on commit
2 as select source_pk as key_col, col_3 as data_col from source_table
Materialized view created.
SQL> select count(*) from source_table;
SQL> select count(*) from my_mv;