视图

视图
视图是由已存在的数据,通过一定的运算规则,来获得新的数据集合.可以让用于更加灵活的自定义数据集合,以及为数据安全性提供了一种控制策略.
一. 关系视图
1. 创建关系视图
create or repacle view 视图名称 as 查询语句|关系运算;
2. 查看视图定义
select view_name,text from user_views where view_name=’视图名字’;
3. 更改视图
a) 查看视图各列的可更新情况
Select table_name,column_name,updatable,insertable,deletable 
from user_updatable_columns
where table_name=’视图名字’;
b) 更改视图数据[update,insert,drop]
同表
4. 只读视图
create or repacle view 视图名称 as 查询语句
with read only
5. 创建视图约束[保证数据完整性,仅对insert/update有效]
create or repacle view 视图名称 as 查询语句
with check option

with check option实际是为视图创建了一个约束,该约束主要根据where子句条件判断,oracle将会判断修改[insert/update]后的数据是否违反了该约束,如果违反则抛出错误.

二. 对象视图
(一).对象简介
1.对象类型与对象
  create or replace type as ovject(
    attribute1 datatype1,
    attribute2 datatype2,
    …
    member function functionl,
    …
    member procedure procedurel,
    …
  )
其中, Create or replace type 用于创建一个新的类型,as ovject代表新类型继承object,attribute用于定义对象类型所拥有的属性,datatype代表属性的具体类型,member function用于定义成员函数,member procedure用于定义成员过程.
  eg. create or replace type employee as object(
      emp_id number,
      emp_name varchar2(20),
      emp_job varchar2(20)
      );
      /
2.获得类的相关信息
  select type_name,typecode,attributes from user_types;
  select type_name,attr_name,attr_type_name,length from user_type_attrs;
3.根据类定义表的结构
  eg. create table tmp_emp of employee;
4.把对象插入到数据表中
  declare e employee;
  begin
    e :=employee(1,’王大’,’SALESMAN’)
    insert into tmp_emp values (e);
  end;
  /
5.从数据到对象
  declare e employee;
  begin
    select value(t) into e from tmp_emp t where emp_id=1;
    e.emp_id:=e.emp_id +1;
    insert into tmp_emp values(e);
  end;
  /
(二).对象视图
1.创建对象视图
  create or replace view ov_emp of employee
  with object oid(emp_id) as
  select emp_id a_id,emp_name,emp_job from tmp_emp;
2.查看对象视图信息
  select view_name,view_type from user_views where view_name='OV_EMP';
  view_type代表了视图基于的对象类型.
3.查询对象视图
  select * from ov_emp;
4.更新对象视图
  insert into ov_emp values(3,'李二','WORKER');
  以上数据会插入到视图ov_emp中以及基础表tmp_emp中.
  通过对象视图,可以同时向基础表中插入数据,而此时的插入方式可以以对象实例方式实现.

三.物化视图
1.物化视图简介
  物化视图的主要意义在于提高数据库性能.对比普通查询语句,利用物化视图可以大大提高执行效率,当数据表的数据更加庞大,查询语句更加复杂的时,物化视图所带来的性能上的提升将更加显著.
2.使用物化视图
(1) 创建及使用物化视图
  create materialized view 物化视图名 as 视图定义
(2) 在数据字典中获得物化视图信息
  select mview_name,query from user_mviews;
  如果在视图user_objects中查询,会发现有与物化视图同名的数据表
  select object_name,object_type,status from user_objects where .......;
  在查询结果中将含有两条记录,一条标识了物化视图本身,而另一条则标识了物化视图的附属数据表.物化视图创建时,会将查询定义所获得的数据加载到附属数据表中,而当查询物化视图时,查询的对象实际是物化视图的附属数据表.
3.延时载入
  create materialized view 视图名 build deffered as 视图定义;
4.数据刷新
(1) 手动刷新
  exec dbms_mview.refresh('视图名');
(2) 当数据修改被提交时,自动同步数据.
  alter materialized view 视图名 refresh on commit;
  物化视图的数据同步将耗费大量的数据库资源,当数据频繁更新时,将给数据库带来极大的负载,所以自动同步仅仅适用于那些读取频繁,而更新较少的场景下.
  对于更新频繁的场景,应当使用人工刷新的策略,即通过制定refresh on demand.
5.查询重写
(1) 定义
  当进行查询时,oracle改写查询语句,搜寻其他数据源,以在保证结果的情况下提高执行效率,而这个新的数据源,往往是指物化视图.
(2) 物化视图的查询重写功能
  启用:alter materialized view 视图名 enable query rewrite;
  禁用:alter materialized view 视图名 disable query rewrite;

视图总结
 视图特点应用场景
关系视图存储查询定义,可重用 封装查询,数据权限与安全控制 
内嵌视图  不存储查询定义,无需维护,不可重用  临时或中间结果集,子查询  
对象视图  可与对象进行相互映射,面向编程的好处  oracle面向对象编程  
物化视图  存储数据,耗费数据库资源,查询重写  提高性能,查询频繁而更新较少的场景  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26918004/viewspace-752235/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26918004/viewspace-752235/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值