oracle视图(转)
视图的概念
视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。
视图有如下一些优点:
* 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
* 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。
* 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。
* 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。
视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。
视图的创建
创建视图需要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 |
创建只读视图要用WITH READ ONLY选项。
- CREATE OR REPLACE VIEW vi_manager
- AS SELECT * FROM emp WHERE job= 'MANAGER'
- WITH READ ONLY;
执行
DELETE FROM vi_manager;
SQL> delete from vi_manager;
delete from vi_manager
ORA-01752: 不能从没有一个键值保存表的视图中删除
3.创建基表不存在的视图
正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。
使用FORCE选项创建带有错误的视图:
对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。
1.视图的插入
CREATE OR REPLACE VIEW vi_dept10
AS 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选项限制视图的插入。
步骤1:新建部门20视图,带WITH CHECK OPTION选项:
CREATE OR REPLACE VIEW vi_dept20
AS SELECT * FROM emp WHERE deptno= 20
with check option;
除了以上的限制,基表本身的限制和约束也必须要考虑。
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视图(转)的更多相关文章
- Oracle视图分类及各种操作讲解(超级好文)
目录:一.视图的定义: 二.视图的作用: 三.创建视图: 1.权限 2.语法 3.1 创建简单视图 3.2 创建连接视图 3.2.1 连接视图定义 3.2.2 创建连接视图 3.2.3 ...
- Oracle -----视图
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- Oracle视图详解
转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...
- oracle视图总结
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- oracle视图总结(转)
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- ORACLE 视图的 with check option
ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...
- ORACLE视图添加备注
ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.p ...
- Oracle 视图 (待更新, 缓存)
参考: 视图.索引.存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html oracle视图总结(转):http://tianwei013 ...
- Oracle视图(和Mysq一样l)
本章内容: Oracle视图介绍与创建.Oracle视图的查询与修改.Oracle的复杂视图 1. Oracle视图介绍与创建 (1)了解常见的数据库对象都有哪些 (2)了解什么是视图以及为什么要使用 ...
- (转)oracle视图详解
Oracle视图详解 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执 ...
随机推荐
- Mysql 视图使用
视图 简单理解视图就是一张虚拟表,可以简化一些复杂查询语句 举个简单的例子来理解视图 视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询:不包含任何列或数据.使用视图可以简化复杂 ...
- python 阿狸的进阶之路(7)
面向对象 转自林海峰的博客 http://www.cnblogs.com/linhaifeng/articles/6182264.html 面向对象的理解: 将数据分类,比如学生类.数据有关的函数, ...
- linux MYSQL大小写问题处理
1)window下默认大小写不敏感,所以在window下.创建表 test后再想创建表TEST会报错.而linux下默认可以.认为是不同的两张表 2)linux创建数据库,安装完毕后 首要任务是在li ...
- windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue<转>
这三个函数主要用来提升进程的权限 1 OpenProcessToken()函数:获取进程的令牌句柄 OpenProcessToken的原型. BOOL WINAPI OpenProcessToken( ...
- UNITY2018.3 在editor下运行时new memoryprofiler显示 shader占用内存很大的问题在安卓上并没有看到
在安卓机上完全看不到shader占用的内存,但问题是,shader在安卓上真的几乎不占用内存了?(我们的游戏中只使用了mobile下的shader) 参考下面这个文章,说是真机上也有: Unity3D ...
- python 学习笔记之@property
今天学习python类看到 @property 的用法觉得很新奇,就自己尝试了很久,刚开始不明白,后来终于明白了点 其实总结一句话就是, @property 把类中的方法调用方式改变成当成属性属性调用 ...
- ArcGIS自定义工具箱-判断字段值是否相等
ArcGIS自定义工具箱-判断字段值是否相等 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:判断两个字段值是否相等 使用方法: 结果: 联系方式:谢老师,13 ...
- css样式中的绝对路径的参考对象
如果div标签中没有position:absolute;样式,那么img的参考对象就是浏览器 如果div标签中有position:absolute;样式,那么img的参考对象就是父元素,即div标签
- python模拟线性回归的点
构造符合线性回归的数据点 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 随机生成1000个点 ...
- HTTP状态码汇总