视图的概念 
  视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。 
视图有如下一些优点: 
* 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。 
* 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。 
* 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。 
* 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。 
视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。

视图的创建 
创建视图需要CREAE VIEW系统权限,视图的创建语法如下: 
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])] 
AS 子查询 
[WITH CHECK OPTION [CONSTRAINT 约束名]] 
[WITH READ ONLY] 
其中: 
OR REPLACE 表示替代已经存在的视图。 
FORCE表示不管基表是否存在,创建视图。 
NOFORCE表示只有基表存在时,才创建视图,是默认值。 
别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。 
子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。 
WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。 
WITH READ ONLY 表示视图是只读的。 
删除视图的语法如下: 
DROP VIEW 视图名; 
删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。 
1.创建简单视图 (一个行转列)
create or replace view v_iews as
select ename 
  ,max(decode(deptno,'10',job))"10"
  ,max(decode(deptno,'20',job))"20"
  ,max(decode(deptno,'30',job))"30"
  ,max(decode(deptno,'40',job))"40" from emp group by ename

执行结果:

select * from v_iews;

ENAME 10 20 30 40
ADAMS   CLERK    
ALLEN     SALESMAN  
BLAKE     MANAGER  
CLARK MANAGER      
FORD    ANALYST    
JAMES     CLERK  
JONES   MANAGER    
KING PRESIDENT      
MARTIN     SALESMAN  
MILLER CLERK        
SCOTT   ANALYST    
SMITH   CLERK    
TURNER     SALESMAN  
WARD     SALESMAN  
YA_PING   ANALYST    
      CEO
杨平       CEO
2.创建只读视图 
创建只读视图要用WITH READ ONLY选项。 
  1. CREATE OR REPLACE VIEW vi_manager
  2. AS SELECT * FROM emp WHERE job= 'MANAGER'
  3. WITH READ ONLY;

执行

DELETE FROM vi_manager;

SQL> delete from vi_manager;

delete from vi_manager

ORA-01752: 不能从没有一个键值保存表的视图中删除

3.创建基表不存在的视图 
正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。 
使用FORCE选项创建带有错误的视图:

4.视图的操作 
对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。 
1.视图的插入 
步骤2:创建视图:
CREATE OR REPLACE VIEW vi_dept10    
        AS SELECT * FROM emp WHERE deptno= 10;
步骤2:插入新员工:
insert into vi_dept10 values (8888,'liping','CEO',7782,to_date('1983-04-28','yyyy-mm-dd'),5000,0,10);
步骤3:查询实体表
select * from emp where deptno=10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782  CLARK MANAGER 7839 1981-06-09 2450.00   10
7839  KING PRESIDENT   1981-11-17 5000.00   10
7934  MILLER CLERK   7782 1982-01-23 1300.00   10
8888  liping CEO 7782 1983-04-28 5000.00 0.00 10
视图中插入其他部门的员工,结果会怎么样呢?结果是允许插入.但是在视图中看不见,在基表中可以看见,这显然是不合理的。 
2.使用WITH CHECK OPTION选项
如果设置了WITH CHECK OPTION选项,那么只有部门编号为20的员工才能通过视图进行插入。 
使用WITH CHECK OPTION选项限制视图的插入。 
步骤1:新建部门20视图,带WITH CHECK OPTION选项:
 CREATE OR REPLACE VIEW vi_dept20    
        AS SELECT * FROM emp WHERE deptno= 20
        with check option;
步骤2:插入新员工:
SQL> insert into vi_dept20 values (8889,'ping','CEO',7782,to_date('1983-04-28','yyyy-mm-dd'),5000,0,10);
insert into vi_dept20 values (8889,'ping','CEO',7782,to_date('1983-04-28','yyyy-mm-dd'),5000,0,10)
ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句
3.来自基表的限制 
除了以上的限制,基表本身的限制和约束也必须要考虑。

5.视图的查看 
USER_VIEWS字典中包含了视图的定义。 
USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。 
USER_OBJECTS字典中包含了用户的对象。 
可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。

SQL> SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='VI_DEPT10';

TEXT
--------------------------------------------------------------------------------
SELECT "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" FROM emp WHERE

oracle视图(转)的更多相关文章

  1. Oracle视图分类及各种操作讲解(超级好文)

    目录:一.视图的定义: 二.视图的作用: 三.创建视图: 1.权限 2.语法 3.1  创建简单视图   3.2  创建连接视图  3.2.1 连接视图定义  3.2.2 创建连接视图  3.2.3 ...

  2. Oracle -----视图

    视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...

  3. Oracle视图详解

    转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...

  4. oracle视图总结

    视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...

  5. oracle视图总结(转)

    视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...

  6. ORACLE 视图的 with check option

    ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...

  7. ORACLE视图添加备注

    ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.p ...

  8. Oracle 视图 (待更新, 缓存)

    参考: 视图.索引.存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html oracle视图总结(转):http://tianwei013 ...

  9. Oracle视图(和Mysq一样l)

    本章内容: Oracle视图介绍与创建.Oracle视图的查询与修改.Oracle的复杂视图 1. Oracle视图介绍与创建 (1)了解常见的数据库对象都有哪些 (2)了解什么是视图以及为什么要使用 ...

  10. (转)oracle视图详解

    Oracle视图详解   一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执 ...

随机推荐

  1. leetcode985

    import sys class Solution: def sumEvenAfterQueries(self, A: 'List[int]', queries: 'List[List[int]]') ...

  2. golang判断文件/文件夹是否存在

    使用os包,os.stat返回err==nil,说明存在: os.IsNotExist(err)为true,说明不存在:否则不确定是否存在 func DelJar(fileName string) e ...

  3. 浅谈transient关键字

    1,用途 当一个对象实现了Serilizable接口,这个对象就可以被序列化.而有时候我们可能要求:当对象被序列化时(写入字节序列到目标文件)时,有些属性需要序列化,而其他属性不需要被序列化,打个比方 ...

  4. 机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

    1.cv2.erode(src, kernel, iteration) 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数 腐蚀操作原理:存在一个ker ...

  5. 尚硅谷springboot学习19-日志切换

    查看相关依赖关系,排除相关依赖,引入新的日志依赖 slf4j+log4j的方式: <dependency> <groupId>org.springframework.boot& ...

  6. javap——查看class文件的方法

    有时候为了研究Javac的原理,要去看看class文件的内容是如何组织的,这时候很有必要查看class文件.方法有很多种,这里推荐使用JDK自带的javap工具. 首先建立如下源码: public c ...

  7. 从底层获取接口url携带的数据

    从底层获取接口url携带的数据 //实例化HttpServletRequest HttpServletRequest request = ServletHolderFilter.getContext( ...

  8. 遍历DOM树,each()遍历

    在<jQuery教程/理解选取更新范围>一节中,我们知道:当选择器返回了多个元素时,可以使用一个方法来更新所有的元素,不再需要使用循环. 然后有的时候需要遍历元素,怎么办? 使用each( ...

  9. 第一个Python脚本!

    # hello.py print 'Hello Pythons'

  10. 29.Spring-基础.md

    目录 1.目的和作用 [toc] 2.概念 2.1框架的设计 2.2控制反转 2.3AOP [toc] 3. 3.1Spring六大模块 [toc] 1.目的和作用 解决对象的创建和以及对象依赖关系的 ...