当前位置: 首页 > 编程日记 > 正文

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;

ENAME10203040
ADAMSCLERK
ALLENSALESMAN
BLAKEMANAGER
CLARKMANAGER
FORDANALYST
JAMESCLERK
JONESMANAGER
KINGPRESIDENT
MARTINSALESMAN
MILLERCLERK
SCOTTANALYST
SMITHCLERK
TURNERSALESMAN
WARDSALESMAN
YA_PINGANALYST
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;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7782CLARKMANAGER78391981-06-092450.0010
7839KINGPRESIDENT1981-11-175000.0010
7934MILLERCLERK77821982-01-231300.0010
8888lipingCEO77821983-04-285000.000.0010
视图中插入其他部门的员工,结果会怎么样呢?结果是允许插入.但是在视图中看不见,在基表中可以看见,这显然是不合理的。 
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

转载于:https://www.cnblogs.com/UUUz/p/9254099.html

相关文章:

Redis 事物

redis 事物: Redis 事物的实现: 首先 wath监控键值 myKey开启批量执行 multi,执行命令入列,执行 exec 。如果监控的键值mykey 没有被修改过,则exec 中批量执行的命令成功,否则执行失败。无论执行成功与否&a…

python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

原标题:利用SMB漏洞DoS攻击任何Windows系统近日微软报出SMB V1存在漏洞,安全研究员并将此漏洞称作 “ SMBLoris ”,解释其能够发动拒绝服务(Dos)攻击,可以感染 Windows 2000 及以上操作系统的任一版本 SMB …

java基础编程题(2)

1、给定一个二叉树,找出其最大深度。 注:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x…

python元组转字典_python中怎么将元组、字典转化为列表

python中将元组、字典转化为列表的方法: python中可以使用list()方法将元组或字典转化为列表: list()方法语法:list( tup ) 参数 tup -- 要转换为列表的元组。 返回值 返回列表。 示例: 将元组转换为列表:#!/usr/bin/p…

搭建Git服务器教程转载

1. 在Windows下使用sshmsysgit客户端搭建Git服务器 http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-Git-Server-on-Windows-with-CopS 2. 在Windows下使用Apachemsysgit客户端搭建Git服务器 http://www.devbean.info/2011/10/apache-git-server-on-windows/ 3…

存储过程处理错误数据

create or replace procedure ERR_REDUCEDATA is --sx --定义变量 v_realindiobjid VARCHAR2(100); v_indiobjid VARCHAR2(32); v_residuemoney number ; v_reducemoney number ; v_approbjid VARCHAR2(32); -- v_indiecoid VARCHAR2(32); --v_indiecocode VARCHAR2(32); v_Ap…

[置顶] 面向业务开发应用

自从计算机出现后,快速便捷的从太平洋一样的文海中找到水滴大小的资料真正成为了可能,而能够帮助人们实现这一愿望的程序员就像中世纪的航海家一样用神秘的代码程序指引着计算机一步一步实现的需求。而他们所用的被称之为“程序”的序列组合,…

vector方法

借鉴网上资料&#xff0c;整理了vector使用的一些方法&#xff0c;记录下来&#xff0c;方便以后查阅 vector初始化 vector<int>a(10) //只定义长度 vector<int>a(10,1)//长度为10&#xff0c;初始值为1 vector<int>a(b); //用b向量来创建a向量&#xff0c;…

MyEclipse Enterprise Workbench 9.0 破解及注册机 注册码

MyEclipse 9.0的激活机制终于破解了&#xff0c;破解步骤比老版本要复杂一些&#xff0c;但是是绝对可以破解的&#xff0c;这个破解对主程序无任何修改&#xff0c;只替换公钥&#xff0c;如果有牛人会快速从公钥反推私钥&#xff0c;那就什么都不用改了&#xff0c;步骤如下&…

python字典一键多值_python字典中如何一键多值的写入?

python字典中如何一键多值的写入&#xff1f; python字典中一键多值写入的方法&#xff1a; 1、循环写入字典key、value、删除指定的键值对&#xff1a; 原文本‘jp_url.txt’每行元素以逗号分隔:host_key,product_id,product_name,cont_start,cont_end ah2.zhangyue.com,10000…

向实现细节低头

本来想搞明白所有的东西&#xff0c;然后自己集成&#xff0c;避免引入额外的组件&#xff0c;避免复杂的维护成本。 现在想想&#xff0c;相比于投入的巨大精力&#xff0c;其收益过小&#xff0c;还是要有所取舍。转载于:https://www.cnblogs.com/youge-OneSQL/p/9268924.htm…

Session丢值的问题

本来本地调试好好的,一上服务器session就非常容易丢失,表现在,用window.href跳转丢session,用httpmoulde丢session,在frame里面ifarme里面丢session,折磨了一天,才知道是因为应用程序池的原因,一个池里面放了太多网站,导致session丢失(系统还没有上线,光放那也不行), 还有应用程…

换发型app任性扣费?苹果app订阅任性扣费?怎么办?刚成功

2019年9月18日17:09:27 什么黑猫举报没用 先关闭订阅 账户中心自助申请试试&#xff0c;不通过再进行下面这步 https://getsupport.apple.com/?callerhome&PRKEYS 技术支持网址 然后就等电话吧&#xff0c;一般10秒钟就打过来了。 告诉原因&#xff0c;提供收费的订单号&a…

用eclipse阅读编辑android和kernel,uboot的源代码

from: http://hi.baidu.com/designhouse/blog/item/ff3f0df4a33571f37709d736.html 1. 用eclipse阅读编辑android源代码的配置方法有官方文档&#xff0c;非常详细&#xff0c;http://source.android.com/source/using-eclipse.html 阅读android代码用的是Eclipse IDE for Jav…

当一个序列满足对于任意的前 项和都满足不小于_时间序列分析第01讲--平稳序列(基本概念,线性平稳序列)...

第一章 平稳序列1.1平稳序列基本概念无论是从原序列中把趋势项去掉得到的随机波动项&#xff0c;还是用随机差分后得到残差序列&#xff0c;都会存在一种现象&#xff1a;随机项会沿着水平值波动&#xff0c;并且前后之间具有相关性&#xff0c;与独立序列不同。一、定义定义1.…

京医通如何删除临时卡,解绑

1、解绑的话&#xff0c;如果你是正式卡或者社保卡&#xff0c;可以在账户里面&#xff0c;点击卡进去详情页&#xff0c;里面会有一个解绑 2、重点就是临时卡了&#xff0c;挂号的时候很恶心。 目前唯一的解决办法就是&#xff0c;注销账户。 1&#xff09;、解绑所有正式卡 2…

T-SQL查询——详解公用表达式(CTE)

对于Select查询语句来说&#xff0c;通常情况下&#xff0c;为了是T-SQL代码更加简洁和刻度&#xff0c;在一个查询中应用另外的结果集都是通过视图而不是查询进行分解的&#xff0c;但是&#xff0c;视图作为系统对象存储在数据库中&#xff0c;那对于结果集仅仅需要在存储过程…

如何实现显示超过10个字符就显示省略号?

// 要展示的文本(nickName) this.nickName 风一样的女子凤一样的我&#xff0c;有想认识嘛~~ if (this.nickName.length > 10) {this.nickName this.nickName.substring(0, 10) "...";console.log(00, this.nickName)}备注&#xff1a;substring() 方法用于提取…

课程实验代码及动手动脑测试

枚举类型测试代码&#xff1a; public class EnumTest {public static void main(String[] args) {Size s Size.SMALL;Size t Size.LARGE;// s和t引用同一个对象&#xff1f;System.out.println(s t); //// 是原始数据类型吗&#xff1f;System.out.println(s.getClass().is…

python利用自动识别写模块_Python 利用pytesser模块识别图像文字

使用的是python的pytesser模块&#xff0c;原先想做的是图片中文识别&#xff0c;搞了一段时间了&#xff0c;在中文的识别上还是有很多问题&#xff0c;这里做记录分享。 可将图片中的文字转换成文本&#xff08;主要是英文&#xff09;。 1.pytesser安装 使用设备&#xff1a…

C02-程序设计基础提高班(C++)第9周上机任务-类和对象

第9周&#xff1a;阅读教材第8章&#xff08;p231-262&#xff09;&#xff0c;主要内容是类和对象&#xff0c;学会定义类和对象解决问题&#xff0c;完成第9周上机任务&#xff1b;(回到C02-程序设计基础提高班&#xff08;C&#xff09;学习安排)实践任务&#xff1a;【任务…

在不影响配置下,清除netscreen密码

在缺省情况下&#xff0c;设备恢复特征被启用。可通过输入 unset admin device-reset 命令禁用它。同样&#xff0c;如果NetScreen 设备处于 FIPS 模式&#xff0c;恢复特征被自动禁用。1. 在登录提示下&#xff0c;键入设备的序列号。2. 在密码提示下&#xff0c;再次键入序列…

如何删除一个CSDN上自己上传的资源

如何删除一个CSDN上自己上传的资源 第一步&#xff0c;找到你想删除的资源&#xff0c;其URL举例为&#xff1a;http://download.csdn.net/detail/ssergsw/9733040则删除的get请求为&#xff1a;http://download.csdn.net/index.php/user_console/del_my_source/9733040删除成功…

关于计算机中二进制原码,反码,补码的简要解释

原码&#xff0c;补码&#xff0c;反码的概念 正数原码&#xff1a;正数的原码为取绝对值的数转二进制&#xff0c;5的原码为 00000000 00000000 00000000 00000101 负数原码&#xff1a;负数的原码为取绝对值的数转二进制&#xff0c;然后符号位&#xff08;最高位&a…

python是一种面向对象的高级语言_爬了世纪佳缘后发现了一个秘密,世纪佳缘找对象靠谱吗?...

今天在知乎上看到一个关于【世纪佳缘找对象靠谱吗&#xff1f;】的讨论&#xff0c;其中关注的人有 1903&#xff0c;被浏览了 1940753 次&#xff0c;355 个回答中大多数都是不靠谱。用 Python 爬取世纪佳缘的数据是否能证明它的不靠谱&#xff1f;数据抓取 在 PC 端打开世纪佳…

使用邮件规则,将收到的邮件进行分类

随着工作的进行&#xff0c;我们经常会发现邮箱里一大堆各种各样的邮件&#xff0c;而要从中找到指定类型的邮件&#xff0c;只能每次都进行一次搜索。但是&#xff0c;经常这样搜索&#xff0c;先不说效率如何&#xff0c;它肯定会对我们的工作进行一些影响。 在这里&#xff…

多个CALayer的联动

在如何通过手势捕获CALayer基础上做了个示例&#xff0c;两个CALayer的联动&#xff0c;当拖动左侧的Layer的时候&#xff0c;右侧的Layer随动。因为右侧的动画没有关闭&#xff0c;有延迟&#xff0c;产生随动的效果。如果不想延迟&#xff0c;可参考拖动动画的问题及解决。 在…

在不允许新建对象的条件下,将list中指定条件的值去除

package com.liujianwang.learning;import java.util.LinkedList; import java.util.List;public class ListTest {public static void main(String[] args) {/** 在不允许新建对象的条件下&#xff0c;将list中指定条件的值去除。* 例如&#xff1a;移除list中值大于6的元素。…

openlayers map获取全部feature_tf2.0基础-tf.data与tf.feature_column

7.2.1 tf.data使用 tf.data API 可以轻松处理大量数据、不同的数据格式以及复杂的转换。tf.data API 在 TensorFlow 中引入了两个新的抽象类&#xff1a;tf.data.Dataset 表示一系列元素&#xff0c;其中每个元素包含一个或多个 Tensor 对象。&#xff1a;创建来源&#xff08;…