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

查询视图

与查询表的语法一模一样。视图创建完毕就可以使用视图来查询,查询出来的都是 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视图的主要内容,如果未能解决你的问题,请参考以下文章

回收站视图未显示在片段中

如何从片段内的列表视图打开链接网址?

如何使列表视图出现在片段中?

如何从活动中更改片段中视图的可见性

片段中的网格视图

如何在kotlin的片段内显示网格视图?