天学通Oracle第二版]第7章视.ppt

上传人:小飞机 文档编号:6563942 上传时间:2023-11-13 格式:PPT 页数:26 大小:282.65KB
返回 下载 相关 举报
天学通Oracle第二版]第7章视.ppt_第1页
第1页 / 共26页
天学通Oracle第二版]第7章视.ppt_第2页
第2页 / 共26页
天学通Oracle第二版]第7章视.ppt_第3页
第3页 / 共26页
天学通Oracle第二版]第7章视.ppt_第4页
第4页 / 共26页
天学通Oracle第二版]第7章视.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《天学通Oracle第二版]第7章视.ppt》由会员分享,可在线阅读,更多相关《天学通Oracle第二版]第7章视.ppt(26页珍藏版)》请在三一办公上搜索。

1、第7章 视图,视图是数据库中特有的对象。视图用于存储查询,但不会存储数据(物化视图除外)。这是视图和数据表的重要区别。可以利用视图进行查询、插入、更新和删除数据。Oracle中有4种视图:关系视图;内嵌视图;对象视图;物化视图。,7.1 关系视图,关系视图是四种视图中最简单,同时也是最常用的视图。读者可以将关系视图看作对简单或复杂查询的定义。它的输出可以看作一个虚拟的表,该表的数据是由其他基础数据表提供的。由于关系视图并不存储真正的数据,因此占用数据库资源也较少。,7.1.1 建立关系视图,1创建关系视图create view vw_employees as select employee_i

2、d,last_name|first_name as employee_name,province|-|city as location from employees2查看视图定义select text from user_views where view_name=VW_EMPLOYEES 3查看视图内容select*from vw_employees,7.1.2 修改/删除视图,1修改视图(为视图添加新列SALARY)create or replace view vw_employees as select employee_id,last_name|first_name as employ

3、ee_name,province|-|city as location,salary from employees 2删除视图drop view vw_employees,7.1.3 联接视图,在范例7-1中所创建的视图是基于单个基础表的。而在实际应用中,大多数的视图是较为复杂的查询。这也是视图的一大优势,封装复杂查询。create or replace view vw_employee_salaryas select e.employee_id,e.last_name|e.first_name employee_name,e.salary+s.total_price*0.1 salaryfr

4、om employees e,employee_sales swhere e.employee_id=s.sale_byand s.sale_month=3月,7.1.4 编译视图,视图依赖于基础表的存在而存在,当基础表进行了结构上的调整,有可能会对视图产生影响。如欲再次使用该视图,必须对视图进行重新编译。alter view vw_employee_salary compile,7.1.5 使用force选项强制创建视图,有时,视图的基础表还没有创建,但是仍然希望能够创建基于不存在的数据表的视图。这是因为,数据表的预期创建者和视图的创建者并非同一用户。视图创建者不希望等待基础表创建者的工作完

5、成之后才进行自己的工作。假设,此时视图创建者已经对基础表的结构有了清晰的概念,例如books将被创建,以存储图书信息。create or replace force view vw_books asselect book_name,authorfrom books,7.1.6 利用视图更新数据表,通过视图,不但可以对基础表中的数据进行查询,而且可以对数据表中的数据进行更新。更新的方式非常简单直接更新视图中的数据即可将对基础表进行相应的更新。当然,并非视图中的所有列都能够进行更新,并反映到基础表中。只有那些直接由基础表获得的列可以进行更新操作,如范例7-5中的列book_name和列author

6、;而由基础表中的数据经过运算获得,仅凭视图中的数据无法判断基础表中的数据情况的列,不能进行更新,vw_employees中的name列。select table_name,column_name,updatable,insertable,deletable from user_updatable_columns where table_name=VW_BOOKSinsert into vw_books values(千年一叹,余秋雨),7.1.7 with check option选项,创建视图时,with check option是常用的选项之一。一旦使用了该选项,那么Oracle将保证视图

7、在数据更新之后与更新之前的结果集相同。create or replace view vw_books asselect*from books where book_id=5 update vw_books set book_id=6create or replace view vw_books as select*from books where book_id=5with check option,7.1.8 关系视图小结,1保障数据安全性2数据整合3数据透明性,7.2 内嵌视图,关系视图作为查询定义,一旦创建,即可存在于数据库中,并可被多次使用。但有时,需要某个视图作为过渡结果集,但在一次

8、使用之后,便不再需要,此时不宜创建关系视图。因为关系视图占用数据库资源,而且也会增加维护成本。此时应该选择使用内嵌视图。,7.2.1 内嵌视图简介,顾名思义,内嵌视图也是视图,只是不会利用create view进行显式创建。也不能在数据库中查询到其相关信息。一般情况下,被嵌套在查询语句中使用,因此称为内嵌视图。其功能类似于子查询。当然,内嵌视图也可以出现在更新、插入和删除语句中。内嵌视图具有临时性,它只在被嵌入语句的执行期间有效,并可以在被嵌入语句的任何地方使用该视图。,7.2.2 内嵌视图的使用,1利用内嵌视图进行查询select*from(select employee_id,last_n

9、ame|first_name employee_name,salary from employees order by salary desc)where rownum=32利用内嵌视图更新数据表,7.2.3 内嵌视图小结,1内嵌视图与临时表、关系视图的使用场景2分辨内嵌视图与子查询,7.3 对象视图,目前,数据库都是关系型数据库,但是,面向对象编程的思想早已深入人心。Oracle数据库不仅可以通过关系表来存储数据,同样,也可以创建对象,以对象的方式进行数据存储。关系视图是由关系表进行查询获得的,而对象视图则是对对象进行查询获得的。,7.3.1 对象视图简介,说到对象视图,自然应该首先提到对象

10、。Oracle中的对象仍然是一个逻辑概念,虽然可以从对象中获取数据,就像数据真实存储于对象中一样。但是在对象的概念之下,数据仍然是存储于关系表中的。要创建对象,首先要建立对象类型,类似于Java或C#中类的概念,7.3.2 创建和使用对象视图,利用基础对象类型employee来创建对象视图,那么视图中的列将与employee_type中的属性保持一致。create type employee is object(employee_id number,employee_name varchar2(20),location varchar2(50),salary number)create or

11、replace view ov_employees of employee with object oid(employee_id)as select employee_id,last_name|first_name,province|city,salary from employees 注意,oid的值employee_id指的是对象employee中的属性,并非基础表employees中的employee_id列。,7.4 物化视图,前面所讲述的三种视图关系视图、内嵌视图和对象视图,实际都是通过定制查询,并利用查询定义来获取数据。三种视图都不会直接存储数据,每次操作时,都会进行编译。本节讲

12、述另外一种视图物化视图。,7.4.1 物化视图简介,物化视图是物理化视图的简称,顾名思义,该视图存储实际数据,因此,会占用一定的数据库空间。在这一点上,更接近于临时表。但不像临时表那样在某个特定的时机会删除数据。物化视图中的数据是可重用的,因此,经常应用于读取频繁的场合。物化视图对于大数据表的处理显得尤为重要。为了统计一个拥有百万级记录的数据表的总和及平均值问题,将耗费大量数据库资源和时间。可以通过物化视图改善这一状况。即,对表进行一次统计,并将统计结果存储在物化视图中,那么,以后的每次查询直接查询该视图即可。,7.4.2 物化视图的使用,1创建物化视图create materialized

13、view mv_monthly_salesbuild immediaterefresh on commitenable query rewriteas select sale_month,sum(price*quantity)from employee_sale_details group by sale_month2查看物化视图信息select object_name,object_type,status from user_objects where object_name=MV_MONTHLY_SALES,7.4.3 物化视图的数据加载,在范例7-15创建物化视图的SQL语句中使用了bu

14、ild immediate。该选项用于立即加载物化视图的数据。也就是说,在创建物化视图的同时,立即根据定义从基础表中获取数据,并将数据添加到物化视图中。另外一个可用选项为build deffered,表示延迟载入数据。使用延迟加载是必要的。有时,物化视图的基础表数据量巨大,载入数据会耗费大量资源。直接使用立即加载策略,在数据库使用高峰期,会造成客户端的延迟。但是,后续的开发工作可能使用到该物化视图,那么可以采用延迟加载数据的策略。,7.4.4 物化视图的数据更新,物化视图的数据应该根据基础表的更新而更新。范例7-15创建物化视图的SQL语句中使用了refresh on commit,要求Ora

15、cle实现自动更新的功能。即基础表的数据更新被提交后,应该自动更新物化视图的数据。,7.4.5 查询重写,在范例7-15的创建物化视图SQL语句中,使用了enable query rewrite选项。该选项用于启用查询重写。查询重写是指Oracle对基础表的查询,按照优化原则,查找恰当的物化视图,如果获得优化视图,则将查询转化为对物化视图的查询。select sale_month,sum(quantity*price)sale_quantity from employee_sale_details group by sale_month删除物化视图,再次查看SQL语句的花费。drop mate

16、rialized view mv_monthly_sales,7.5 本章小结,本章讲述了Oracle中的四种视图:关系视图、内嵌视图、对象视图和物化视图。其中关系视图是最常用的视图。关系视图在安全性、组合数据及增强性能方面都有着极为广泛的应用。内嵌视图则无需真正创建一个视图对象,而更接近于临时视图,具有运行时有效的特点,使内嵌视图使用起来非常灵活、方便。组装数据;封装复杂查询;提供建模模型;提高响应速度。,7.6 本章实例,本章主要讲述了视图的创建和使用。在Oracle数据库中,本身存在着若干已创建的视图。这些视图可以用来获取许多重要信息。例如,为了获得数据库中,某个表的所有列,即可利用视图

17、user_tab_cols。该范例演示了如何获得某个表/视图的所有列。select table_name,column_name,data_type from user_tab_cols where lower(table_name)=booksselect table_name,column_name,data_type from user_tab_cols where lower(table_name)=vw_employee_salary,7.7 习题,1视图共分为哪几种?2何时应当使用内嵌视图?3简述对象视图的主要特点。4简述物化视图的主要特点。5如何获得数据库中某个用户的所有对象名称?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号