首页 > 数据库技术 > 详细

Oracle视图

时间:2021-05-30 15:38:49      阅读:17      评论:0      收藏:0      [点我收藏+]

视图

概念:视图就是提供一个查询的窗口,所有数据来自于原表

视图就是封装了一条复杂查询的语句。

视图的作用

1、视图可以屏蔽掉一些敏感字段。比如emp表中有一个敏感字段sal,即薪水,所以在视图中不显示这一列即可。对基表中的其它列起到安全和保密的作用,可以限制数据访问。

2、保证总部和分部数据及时统一。比如总公司有雨伞10万把,分公司卖雨伞,由于分公司要卖的雨伞的数量不能超过总公司雨伞的数量,所以分公司必须知道总部有多少雨伞。如果总部和分部都执行了查询语句,当总部突然之间卖出了10万把雨伞,此时总部已经没货了,如果分部没有及时去查询,就会出问题。为了避免这种情况,我们让总部从表中查,分部去看视图。因为视图中根本就没数据,那么只要总部的数据改变了,分部立马就能看到最新的数据。

3、如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询;

要想创建视图,必须有DBA权限。

查看哪些用户被授予了DBA权限

select * from dba_role_privs where granted_role=DBA;

技术分享图片

 即itcast用户(密码为itcast)有DBA权限。scott用户没有权限,在Scott用户下会报错如下:

技术分享图片

要想创建关于emp表的视图,由于当前用户下没有emp表,我们可以通过跨用户查询语句来创建表,

-- 跨用户查询
select * from scott.emp;

通过跨用户查询来创建emp表

-- 通过跨用户查询来创建emp表
create table emp as select * from scott.emp;

创建视图

语法 1.:CREATE VIEW 视图名称 AS 子查询

范例:建立一个视图,此视图包括了 20 部门的全部员工信息

create view empvd20 as select * from emp t where t.deptno = 20

此时,views目录下会多一个视图

技术分享图片

查询视图

与查询表的语法一模一样。视图创建完毕就可以使用视图来查询,查询出来的都是 20 部门的员工
-- 查询刚创建完的视图
select * from empvd20;

结果如下:

技术分享图片

修改视图

语法和修改表的语法一样。凡是做增删改,一定要记得加上提交事务。

-- 修改视图
update empvd20 t set t.ename = smithOne where t.empno=7369;
commit;

查看视图

select * from empvd20;

结果:

技术分享图片

 查看emp表

select * from emp;

结果:

技术分享图片

 我们尝试着修改视图但是发现是视图所查询的表的字段值被修改了,即修改视图也就是修改了表,视图数据的改变,其实还是改的原表的数据。所以我们一般不会去修改视图。 

我们可以设置视图为只读。

语法 2:CREATE OR REPLACE VIEW 视图名称 AS 子查询 

如果视图已经存在我们可以使用语法 2 来创建视图,这样已有的视图会被覆盖。 
-- 对已经存在的视图进行覆盖
create or replace view empvd20 as select * from emp t where t.deptno=10

结果如下:

技术分享图片

创建只读视图

语法 3:CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY

加上with read only即可,这样就无法修改视图了。

-- 创建只读视图
create or replace view v_emp as select * from emp t where t.deptno=20 with read only;

 

Oracle视图

原文:https://www.cnblogs.com/zwh0910/p/14827151.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!