A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 鱼丸儿 于 2017-12-21 19:59 编辑

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

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

而我们创建物化视图sql如下【错误示例】
[SQL] 纯文本查看 复制代码
create materialized view mv_teacher  
refresh fast   
as   
select r.rowid ,r.name name1 from teacher r 

该视图是默认是基于 primary key来建立的 所以不能创建成功,并且提示了以上的错误,那么我们应该怎么写才能不报错呢?,如下所示
[SQL] 纯文本查看 复制代码
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 的增量刷新视图
定义方法如下
[SQL] 纯文本查看 复制代码
create materialized view log on teacher with primary key;--创建视图日志 
create materialized view mv_teacher8  
refresh fast [ with primary key] --此处可省略,因为该视图默认就是基于主键  
as   
select * from teacher 





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马