设为首页 加入收藏

TOP

11GConcept第四章翻译Partitions,Views,andOtherSchemaObjects(分区,视图,以及其他SchemaObjects)(四)
2014-11-24 08:16:37 来源: 作者: 【 】 浏览:4
Tags:11GConcept 第四章 翻译 Partitions Views andOtherSchemaObjects (分区 视图 及其他 SchemaObjects
没有使用似的

因此,数据库就可以使用基表上任意一列的索引,无论这个一列是不是在这个视图的定义中。

有些时候,Oracle数据库没办法在用户查询的时候 没有办法对视图合并,在这些情况下,数据库可能没办法使用基表所有列上的索引。

2、将合并后的语句进行解析,然后放入shared sql area

Oracle数据库将这个SQL解析,放入shared sql area,因此使用了视图节省了内存的使用(相关语句变短了)。

3、执行这个SQL。

下面这个语句解析了数据库访问的过程。假设你创建了employees_view的视图,这个视图基于employees和departments表:

CREATE VIEW employees_view AS

SELECT employee_id,last_name,salary,location_id

FROMemployees JOIN departments USING(department_id)

WHEREdepartments.department_id=10;

一个用户执行了如下查询:

SELECT last_name

FROM employees_view

WHERE employee_id=9876;

Oracle数据库会将视图合并,成为如下结构的查询语句,这个语句是它真正获取数据的语句:

SELECT last_name

FROM employees,departments

WHEREemployees.department_id=departments.department_id

AND departments.department_id=10

AND employees.employee_id=9876;

Updatable Join Views(可更新的join视图)

Join视图就是 该视图定义时,FROM后面有多个表 或者视图。

下面的例子中,staff_depat_10_30视图就是根据employees和departments表join的。

仅仅包括department_id是10和30的雇员信息。

CREATE VIEW staff_dept_10_30 AS

SELECTemployee_id,last_name,job_id,e.department_id

FROM employees e,departments d

WHERE e.department_id IN (10,30)

AND e.department_id = d.department_id;

一个可更新的join视图,可以同样可以叫modifiable join view(可修改的视图),涉及两个或者多个基表的视图,而且可以执行DML操作。

可更新join视图包括多个表在第一层FROM后面,而且没有WITH READ ONLY约束子句。

为了实现真正意义上的可更新,一个视图必须满足几个条件。

举个例子,一个最基本的规则就是,一个INSERT,UPDATE或者DELETE操作,在一个join视图上,同一时间只能对其中的一个基表进行操作。

下面查询USER_UPDATABLE_COLUMNS数据字典的语句,显示出这个视图是可以更新的:

SQL> SELECT TABLE_NAME, COLUMN_NAME,UPDATABLE

2 FROM USER_UPDATABLE_COLUMNS

3 WHERE TABLE_NAME = 'STAFF_DEPT_10_30';

\

一个join 视图上,所有可更新的列,都必须映射向一个key-preserved table(键保护的表),

在join查询中,一个键保护的表指的是,每个基表中的行,在查询视图时 最多出现一次。

在上面创建视图的例子中,department_id是departments表的主键,这样employees表的每行与departments join后,只出现一次,这里使得employees表 成为键保护的表。

在这里departments表是非键保护的表。因为它的每一行可能会很多次的出现在返回的结果中。

Object Views

像view是一个虚拟表一样,一个object view也是一个虚拟的object 表。view中的每行都是一个object(实体)。object是object type(抽象的现实世界实体,比如采购订单)的一个具体案例。object type是用户自定义的数据类型。

你可以检索,更新,插入以及删除 相关数据,如果它们是存放成一个object。你同样可以使用object type定义为视图中的一列,想嵌套表或者数组那样。

和普通事务一样,object 视图可以只提供你想让用户看见的数据。

举个例子,一个object 视图可以提供关于IT程序猿的数据,但是隐藏了敏感数据 比如工资。

下面的例子是创建了一个employee_type Object然后视图it_prog_view基于这个object:

CREATE TYPE employee_type AS OBJECT

(employee_id NUMBER(6),

last_name VARCHAR2(25),

job_id VARCHAR2(10)

);

/

CREATE VIEW it_prog_view OF employee_type

WITHOBJECT IDENTIFIER (employee_id) AS

SELECT e.employee_id, e.last_name, e.job_id

FROM employees e

WHERE job_id = 'IT_PROG';

Object视图在原型程序或者面向对象转换的应用中非常有用。因为view中的数据可以通过下面的关系型表获取。你可以正常运行面向对象的应用,而不需要转换原本存在的表到不同的物理结构。

Overview of MaterializedViews(物化视图概述)

物化视图,查询的结果 事先被存储好了。查询中的FROM语句可以是表,视图,物化视图,这些对象的集合 叫做对象统称为master table(主表,复制术语)或者 detail tables(明细表,数据仓库术语)。

物化视图用来汇总,计算,负责,分散数据。它适用于多重计算环境,它适用于如下各种计算环境:

·在数据仓库环境,你可以使用物化视图计算以及存储分组函数计算出来的值,比如像sum或avg。

一个summary就是一个聚合的视图,通过预先的计算和聚合,并将结果存入一个表中,用来减少查询时间。

物化视图就相当于 summary(看"Data WarehouseArchitecture(Basic)").你同样可以使用物化视图来计算和聚合(可不聚合),如果兼容性是Oracle 9i或以上,那么物化视图可以用在加where的查询语句。

·在物化视图复制中,视图保存 表 某一个时间 全部或者部分的 数据copy。物化视图将数据分发到几个节点,同步各个节点的更新。这种形式的 复制 适合的环境 如现场销售人员,手中的数据库无法保证试试连接着网络。

·在移动的计算环境中,你可以使用物化视图 从 服务器上下载数据子集到移动客户端上,定期从中心服务器刷新最新数据,并定期讲客户端的修改传回中心服务器。

在一个复制环境中,一个物化视图分享其他数据库的表中的数据,这个数据库叫做master database。物化视图

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇linux操作系统下完全删除oracle数.. 下一篇Oracle分析表简介

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)