阅读 149

Oracle视图

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目录下会多一个视图

查询视图

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

-- 查询刚创建完的视图select * from empvd20;

结果如下:

修改视图

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

-- t.ename =   t.empno=

查看视图

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;

来源https://www.cnblogs.com/zwh0910/p/14827151.html

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐