oracle视图简介与创建方法

发布时间:2020-05-16编辑:脚本学堂
本文介绍了oracle视图的创建方法,当通过视图修改数据的时候,实际上是在修改基表中的数据,有研究oracle视图的朋友可以参考下。

本节内容:
oracle视图

视图是从一个或多个表或视图中获得,这些表的数据存储在数据库中,这些用于产生视图的表叫做视图的基表。
当通过视图修改数据的时候,实际上是在修改基表中的数据。
同样修改基表的数据也会改变视图的数据视图的安全性可以防止未授权用户查看特定的行或列,是用户只能看到表中特定行的方法如下:
1,在表中增加一个标志用户名的列;
2,建立Oracle视图,是用户只能看到标有自己用户名的行;
3,把视图授权给其他用户。

oracle视图的基本语法:
 

CREATE [OR REPLACE] [FORCE] [NOFORCE] VIEW view_name
[(column_name)[,….n]]
AS
Select_statement
[WITH CHECK OPTION[CONSTRAINT constraint_name]]
[WITH READ ONLY]
 

REPLACE: 如果创建视图是,已经存在此视图,则重新创建此视图,相当于覆盖
FORCE: 强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建
简单视图(基于单个基表),复杂视图(基于多个基表或视图)
可以 更新视图的前提:没有使用 连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有 GROUP BY,ONNECT BY ,START WITH子句及 DISTINCT关键字. 创建视图的SELECT 语句中不包含从 基表列通过计算所得的列. 创建视图没有包含 只读属性
物化视图(Materialized View): Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据;

物化视图的类型:
ON DEMAND(在该视图需要被刷新的时候才刷新,可以通过 DBMS_MVIEW.REFRESH来进行手动刷新); ON COMMIT(一旦基表有了事务的commit,就立即更新)
BUILD IMMEDIATE(default)是在创建物化视图的时候就生成数据; BUILD DEFERED创建时不立即生成
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。(www.jb200.com
分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLEQUERY REWRITE

物化视图刷新方式:
完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图
快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。
采用 FORCE方式,Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新

创建物化视图实验:
赋予权限

创建日志
 

复制代码 代码示例:
create materialized view log on {table_name} tablespace {tablespace_name} with primary key;
 

创建物化视图
 

复制代码 代码示例:
CREATE  MATERIALIZED  VIEW  AICS_DAVE 
TABLESPACE&BISONCS_SPACE 
REFRESH FAST 
    ON  DEMAND 
    --第一次刷新时间  
    --START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')  
   START  WITH  SYSDATE 
    --刷新时间间隔。每1天刷新一次,时间为凌晨2点  
    --NEXT TRUNC(SYSDATE,'dd')+1+2/24  
    NEXT  SYSDATE+1/24/20 
WITH   PRIMARY   KEY  
--USING DEFAULT LOCAL ROLLBACKSEGMENT  
DISABLE QUERY REWRITE  AS  
SELECT  MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME, UPDATE_TIME, SW_VERSION 
FROM  AICS_DAVE@LINK_DAVE; 
 

创建索引
 

复制代码 代码示例:
CREATE   INDEX  IDX_T_DV_CT 
    ON  AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME) 
   TABLESPACE &BISON_IDX; 
  
CREATE   INDEX  IDX_T_DV_UT 
    ON  AICS_DEV_INFO (UPDATE_TIME) 
   TABLESPACE &BISON_IDX; 
  
CREATE   INDEX  I_T_DV_MSISDN 
    ON  AICS_DEV_INFO (MSISDN) 
   TABLESPACE &BISON_IDX; 

第二部分,oracle视图以及操作视图

作用:
1,对数据进行隐藏
2,展现部分列数据给用户

例子:只把20部门的人员公开
 

复制代码 代码示例:
create view See
as
select ename,empno from T_emp where deptno = 20;
# 查询和表一样:
Select * from See;

可更新的连接视图(updatable join view )是指能够执行 UPDATE,INSERT,和 DELETE 操作的连接视图(join view)。
ALL_UPDATABLE_COLUMNS,DBA_UPDATABLE_COLUMNS,及
USER_UPDATABLE_COLUMNS 数据字典视图(data dictionary view)中的信息描述了视图中那些列是可更新的。

为了保证视图是可更新的,其定义中不能包含以下语法结构(construct):
1、集合操作符(set operator)
2、DISTINCT 操作符
3、聚合函数(aggregate function)或分析型函数(analytic function)
4、GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
5、在 SELECT 之后的列表中使用collection expression
6、在 SELECT 之后的列表中使用子查询(subquery)
7、连接(join)(但是有例外情况)