oracle中的视图详解
1.视图的概述
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)
2.视图的存储
与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
3.视图的作用
用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下:
通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制
隐藏数据复杂性
视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏了数据来源于多个表的事实。
简化用户的SQL 语句
用户使用视图就可从多个表中查询信息,而无需了解这些表是如何连接的。
以不同的角度来显示基表中的数据
视图的列名可以被任意改变,而不会影响此视图的基表
使应用程序不会受基表定义改变的影响
在一个视图的定义中查询了一个包含4 个数据列的基表中的3 列。当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。
保存复杂查询
一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。
逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
4.视图的工作机制
视图的定义就是其使用的查询语句,Oracle 将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作:
将引用了视图的语句与视图的定义语句整合为一个语句
在共享SQL 区解析整合后的语句
执行此语句
当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。
5.视图的依赖性
由于视图的定义是一个引用了其他对象(表,视图)的查询,因此视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。
6.可更新的连接视图
连接视图是指在一个视图的定义查询的from字句中引用了多个表或视图。而可更新的连接视图是指能够执行 UPDATE,INSERT,和 DELETE 操作的连接视图。为了保证视图是可更新的,其定义中不能包含以下语法结构:
集合操作符
DISTINCT 操作符
聚合函数或分析型函数
GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
在 SELECT 之后的列表中使用集合表达式
在 SELECT 之后的列表中使用子查询
连接(join)(但是有例外情况)
对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修改。
详细出处参考:http://www.jb51.net/article/21527.htm
转载于:https://www.cnblogs.com/Struts-pring/archive/2013/04/23/3037056.html
oracle中的视图详解相关推荐
- oracle中的用户详解 【转】
oracle中的用户详解 [转] - feiyun8616 - 博客园 (cnblogs.com)https://www.cnblogs.com/feiyun8616/p/6497690.htmlor ...
- oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...
ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...
- oracle中调试存储过程,详解Oracle调试存储过程
详解Oracle调试存储过程 一 调试关键步骤 1.在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2.点击小瓢虫,弹出调试窗口,截图如下: 3.输入7839员工编号,点击确认,进行调试,截图 ...
- oracle中to_date函数详解
to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:mm:ss& ...
- Oracle中动态SQL详解
1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...
- [转载]Oracle中动态SQL详解
1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...
- ORACLE中dual的详解及其故障恢复
什么是dual呢? 首先,dual是属于sys用户的: 它只有一个X varchar2(1)的列: 查询这个虚拟的列不会产生逻辑的IO: dual是oracle中的一个实际存在的表,任何用户都可读取, ...
- oracle中的dual详解
对于Oracle的dual,有以下几点我们需要明确: 第一点dual不是缩写词而是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的. 第二点Oracle中的dual表是一个单行单列的虚 ...
- oracle中的柱状图,详解Oracle中XMI开发UML图表技术
XML是面向机器的数据格式,虽然手工编写困难,但处理效率高.当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴.有史以来第一次,这个世界拥有了一种用来结构 ...
最新文章
- 探索 YOLO v3 实现细节 - 第6篇 预测 (完结)
- 阿里员工 1 天有 26 个小时,怎么回事?
- Ext FormPanel布局 (一行显示两对控件元素)
- 《React源码解析》系列完结!
- 函数signal、sigaction
- LeetCode 337. 打家劫舍 III(记忆化+递归)
- 怎么保存php格式,把php代码保存到php文件实现方法
- IF Exists在Oracle中怎么用?
- 国际h2真假u盘测试软件,u盘速度测试软件H2TEST
- 【学习笔记】利用偏导求解不等式(拉格朗日数乘法)
- TCC(TinyC)编译器汉化(中文编译器、汉语编程)之五:语法分析下
- 再探c++ priority
- Kaka集群生产者消费者使用实例(二)
- 天降公网ip | 你也许已经有公网IP了
- Nginx性能优化(十八)
- Kotlin学习安卓篇(一)为什么要学习Kotlin?
- 人工蜂群算法求解TSP旅行商问题C++(2020.11.13)
- Latex语法学习10:盒子的使用(fbox, tcolorbox, boitee),支持设置颜色和换页
- gitlab rpm包安装方法
- PLSQL查询语句中日期格式使用不当会导致性能和效率很低
热门文章
- Apollo自动驾驶入门课程第①讲—无人驾驶概览
- java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址
- centos7 mysql tar_CentOS7中mysql-5.7.21-el7-x86_64.tar.gz版MySQL的安装与配置
- java oracle database user dsn_跨会话序列化数据库连接
- php能不能用MyBatis,Mybatis与Ibatis的区别
- boot lib分离 spring_SpringBoot打包分离依赖jar和资源文件
- Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:
- ThinkPHP redirect 页面重定向使用详解与实例
- 12无法使用otg_12个冷知识:或许只能看看而无法使用,但却真实存在着
- 判断非负整数是否是3的倍数_五年级数学因数与倍数知识点汇总与解题方法技巧...