Oracle:视图(二)

对象视图

Oracle中的对象任然是一个逻辑概念,虽然可以从对象中获得数据,如同数据以对象形式
存储一样。但是在对象的概念下,数据任然是存储与关系表中。

  • 创建对象,首先要建立对象类型。
create type emp_obj is object
(empno number,ename varchar2(20),sal number(7,2))
/

-- create type命令用于创建新的类型
-- employee 指定了新类型的名称
--is object表示该类型是一个对象
  • 利用基础对象类型employee来创建对象视图
create or replace view ov_emp of emp_obj
with object oid(empno) as
select empno,ename,sal from emp
/

ov_employee标识了新视图的名称,ov表示前缀
of employee表示新视图是基于对象类型employee;
with object oid用来标识对象中的主键,该主键是employee_id属性;
(oid的值employee_id指的是对象employee中的属性,并非基础表中employees中
的employee_id列)
select 语句为视图提供数据源。

  • 查看视图对象
desc ov_employees;
  • 在数据库中查询对象视图ov_employees的信息
select view_name,view_type,oid_text from user_views
where view_name='OV_EMPLOYEES' or view_name='VW_EMPLOYEE_SALARY'

-- user_view 可以对所有用户视图信息进行查询
-- view_name 是关于视图名称的列
-- view_type是视图基于的对象类型
-- oid_text指定了对象中的主键

物化视图

关系试图,内嵌视图和对象视图,实际都是通过定制查询,并利用查询定义来获取数据。三种视图都不会直接存储数据,每次操作时,都会进行编译

物化视图是物理化视图的简称,该视图存储实际数据,因此,会占用一定的数据空间。
更像表,但不像临时表那样在某一个特定的时机会删除数据。物化视图的数据是可重用的,因此,经常应用于读取频繁的场合。

物化视图多用于处理大数据表。但物化视图并不适合统计更新频繁的数据,
因为每一次的更新都连带更新物化视图,所付出的代价是相当大的。

  • 创建物化视图
create materialized view mv_monthly_sales --用于创建物化视图,其没有replace选项
build immediate -- 要求Oracle立即编译视图,可用选项还有build deffered表示延迟载入数据
refreash on commit --一旦基础表的修改被提交,应自动更新视图
enable query rewrite --启用查询重写功能
as
	select sale_month,sum(price*quantity)
	from employee_sale_details
	group by sale_month
/
  • 查看物化视图存放的数据
select * from mv_monthly_sales;
  • 查看物化视图信息
select mview_name,query from user_mvews where mview_name='MV_MONTHLY_SALES';

物化视图在创建视图的同时,也创建了一个同名的物理表,mv_monthly_sales是真正存储数据的地方

  • 物化视图的数据更新
begin
	insert into employee_sale_details values();
	....
	commit;
end;
  • 查询重写
select sale_month,sum(price*quantity) sale_quantity from employee_sale_details
group by sale_month;
  • 删除
drop materialized view mv_monthly_sales;

视图的主要作用

增强安全性;
组装数据
封装复杂查询;
提供建模模型
提高响应速度

面试问题:

1.Oracle中视图的种类?
四种:关系试图、内嵌视图、对象视图、和物化视图
2.关系视图的主要作用?
关系试图的主要作用是封装复杂查询,用户完全可以像查询数据表一样来查询关系视图;
另一方面,利用关系试图还可以方便地实现暴露特定数据,并且利用针对视图地权限分配,提高数据安全性。
3.物化视图地主要作用?
物化视图主要针对查询频繁、更新较少地场景。它将大量数据地综合查询结果进行
存储,从而快速响应客户端查询。当然,物化视图地查询重写功能打开,能更好地匹配来自客户端地
查询。

posted @ 2020-04-03 17:16  LgRun  阅读(183)  评论(0编辑  收藏  举报