create table t1 (id number,
version number,
val varchar2(20),
constraint t1_pk primary key (id, version))
Table created.
insert into t1 (id, version, val)
select 1 id, 0 version, 'A_1' val from dual union all
select 2 id, 0 version, 'B_1' val from dual union all
select 1 id, 1 version, 'A_2' val from dual union all
select 3 id, 0 version, 'B_1' val from dual
4 row(s) inserted.
CREATE MATERIALIZED VIEW LOG ON t1
LOGGING
WITH SEQUENCE, ROWID, (val)
INCLUDING NEW VALUES
Statement processed.
create materialized view t1_sub_mv1
refresh fast on commit
as
select id,
max(version) latest_version,
count(version) cnt_version,
count(*) cnt_all
from t1
group by id
Statement processed.
create materialized view log on t1_sub_mv1
with rowid, sequence (id, latest_version, cnt_version, cnt_all)
including new values
Statement processed.
create materialized view t1_sub_mv2
refresh fast on commit
as
select id,
version,
max(val) max_val_per_id_version,
count(*) cnt_all
from t1
group by id,
version
Statement processed.
create materialized view log on t1_sub_mv2
with rowid, sequence (id, max_val_per_id_version, cnt_all)
including new values
Statement processed.
create materialized view t1_main_mv
refresh fast on commit
as
select mv1.id,
mv1.latest_version,
mv2.max_val_per_id_version val_of_latest_version,
mv1.rowid mv1_rowid,
mv2.rowid mv2_rowid
from t1_sub_mv1 mv1,
t1_sub_mv2 mv2
where mv1.id = mv2.id
and mv1.latest_version = mv2.version
Statement processed.
select id, latest_version, val_of_latest_version from t1_main_mv
ID | LATEST_VERSION | VAL_OF_LATEST_VERSION | 2 | 0 | B_1 | 1 | 1 | A_2 | 3 | 0 | B_1 |
---|
insert into t1 (id, version, val)
select 4, 0, 'D_1' from dual union all
select 4, 1, 'D_2' from dual
2 row(s) inserted.
commit
Statement processed.
select id, latest_version, val_of_latest_version from t1_main_mv
ID | LATEST_VERSION | VAL_OF_LATEST_VERSION | 2 | 0 | B_1 | 1 | 1 | A_2 | 3 | 0 | B_1 | 4 | 1 | D_2 |
---|
insert into t1 (id, version, val)
select 4, 2, 'D_3' from dual
1 row(s) inserted.
commit
Statement processed.
select id, latest_version, val_of_latest_version from t1_main_mv
ID | LATEST_VERSION | VAL_OF_LATEST_VERSION | 2 | 0 | B_1 | 1 | 1 | A_2 | 3 | 0 | B_1 | 4 | 2 | D_3 |
---|
drop materialized view t1_main_mv
Statement processed.
drop materialized view t1_sub_mv1
Statement processed.
drop materialized view t1_sub_mv2
Statement processed.
drop table t1
Table dropped.