Oracle12c 创建物化视图,用union就会报错,报错内容:ORA-12054: 无法为实体化视图设置 ON COMMIT 刷新属性
不使用union,给每个单独的sql创建没问题,只要有union就会报错。我用的是增量刷新,commit提交方式。
创建视图的sql内容如下:
create materialized view log on table_A with rowid ;
create materialized view log on table_B with rowid;
create materialized view log on table_C with rowid ;
create materialized view log on table_D with rowid ;
create materialized view VM_SN_APPLY_PARSE_INFO
REFRESH FORCE ON COMMIT
AS
select a.rowid as aid,
b.rowid as bid,
c.rowid as cid,
d.rowid as did,
.......
from table_A a,
table_B b,
table_C c,
table_D d
where a.is_effective = 1
......
union
select a.rowid as aid,
b.rowid as bid,
c.rowid as cid,
d.rowid as did,
.......
from table_A a,
table_B b,
table_C c,
table_D d
from table_A a,
table_B b,
table_C c,
table_D d
where spd.is_effective = 2
......
尝试将刷新属性设置为ON DEMAND或NEVER,或者修改视图定义,确保不包含不支持ON COMMIT刷新的对象。类似于这样
CREATE MATERIALIZED VIEW mv_name
REFRESH ON DEMAND
AS
SELECT col1, col2, ...
FROM table1
UNION
SELECT col1, col2, ...
FROM table2;
Union对两个查询结果集进行合并操作,将完全重复的记录剔除(合并重复行),相当于合并操作之后再执行一次distinct操作。
提示:Union可以对字段名不同但数据类型相同的结果集进行合并,Union只允许对最终合并的结果集进行order by。
Union查询的限制条件:
person表数据:
person2表数据:
李狗蛋这条记录是完全重复的。现在使用Union联合查询:
-- Union联合多表查询
-- 相当于多个查询结果取并集
SELECT * FROM person
UNION
SELECT * FROM person2;
查询结果只有1条李狗蛋的记录。
关键:Union联合查询是对多个查询结果进行合并,取并集。