Oracle视图
Posted zwh2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle视图相关的知识,希望对你有一定的参考价值。
视图
概念:视图就是提供一个查询的窗口,所有数据来自于原表。
视图就是封装了一条复杂查询的语句。
视图的作用
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目录下会多一个视图
查询视图
-- 查询刚创建完的视图 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 子查询
-- 对已经存在的视图进行覆盖 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视图的主要内容,如果未能解决你的问题,请参考以下文章