欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于物化刷新视图创建以及过程遇到的错误分析记录

程序员文章站 2022-07-12 16:41:07
...
关于物化刷新视图创建以及过程遇到的一些错误分析记录(偏重于增量刷新视图)


1、视图能添加多个约束吗?
普通视图在创建过程中,不能设置多个约束 即 with read only和with check option只能二选一,若创建多个则不通过
2、物化视图日志能在右侧目录右键drop吗?
可以,但是再次创建视图日志时则会报已存在,所以必须通过手动sql删除,如下所示
drop materialized view log on teacher

3、ORA-12006:a materialized view log for "xxxx"."xxx" does not record the primary key;
这个问题纠结了好久才找到答案,真的是都快急的流鼻血了,在此记录一下
这个是因为 我们在建立物化增量刷新视图之前创建的物化视图日志是基于rowid,如下所示
create materialized view log on teacher with rowid;

而我们创建物化视图sql如下【错误示例】
create materialized view mv_teacher
refresh fast 
as 
select r.rowid ,r.name name1 from teacher r

该视图是默认是基于 primary key来建立的 所以不能创建成功,并且提示了以上的错误,那么我们应该怎么写才能不报错呢?,如下所示
create materialized view mv_teacher5
refresh fast with rowid -- 注意此块需要加with rowid
as 
select r.rowid rr,r.*from teacher r--需要存在rowid,并且得有别名

注意上面的sql 加的注释,是需要注意的点,要with rowid,这样我们建立的视图则是基于rowid,而且需要给rowid起别名,否则依然创建不成功

那么既然有基于rowid的视图,其实也有基于primary key 的增量刷新视图
定义方法如下
create materialized view log on teacher with primary key;--创建视图日志

create materialized view mv_teacher8
refresh fast [ with primary key] --此处可省略,因为该视图默认就是基于主键
as 
select * from teacher



以上是关于物化增量刷新视图的一些问题,后期遇到继续补充


相关标签: Oracle