Oracle之视图

2017-11-02  本文已影响0人  产品小正

在Oracle中每一次查询与关联都是生成了一个新的表,这个表在一次查询之后没有办法保存下来,我们引入了视图的概念,通过视图把多张单纯表动态的组合到一张表中来达到上述效果,动态的组合是指原表或者视图一个改变的时候另一个表也随之改变。

视图介绍

视图概念:视图是一张虚拟逻辑表,把多张单独的表动态组合成一张表并存储到数据库中

视图优点:

        简化用户处理数据方式,可以使用简单的查询得到复杂插叙你的结果

        着重于特定数据,避免一些敏感数据或者无用的数据查询出来

        提供简单有效的安全机制,定制不同用户对数据的访问权限

        可以将视图的数据导入到其他程序

视图分类:视图分为简单视图和复杂视图

        简单视图只能从单表获取数据,复杂视图从多表获取数据

        简单视图不包含函数和数据组,复杂视图包含

        简单函数可以实现DML操作,复杂视图不可以

        如果简单视图创建使用with read only,该视图不能进行DML操作

创建视图

注:如果在scoot中想要拥有创建视图的权限,需要赋予权限,即使用系统用户执行grant create view to scott;语句(注意赋予语句后需要commit)。

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

[(alias[, alias]...)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY]

OR REPLACE    若所创建的视图已经存在,ORACLE自动重建该视图;

FORCE              不管基表是否存在ORACLE都会自动创建该视图;

NOFORCE         只有基表都存在ORACLE才会创建该视图:

alias                    为视图产生的列定义的别名;

subquery            一条完整的SELECT语句,可以在该语句中定义别名;

WITH CHECK  OPTION  插入或修改的数据行必须满足视图定义的约束;

WITH READ ONLY          该视图上不能进行任何DML操作。

create view empv30(empno,ename,sal) as select empno,ename,sal from emp where deptno=30;

创建一个empv30里面写empno,ename,sal

create view emp1 (rn,ename,job,sal) as (select rownum rn,a.* from (select ename,job,sal from emp order by sal) a);

将emp表排序结果存到视图 emp1中,随后使用select * from emp1 where rn>4 and rn<11;获取5-10行

查询视图

创建的视图的查询方法和正常的表的查询方法相同即直接使用select语句。

select * from empv30;

修改视图

修改视图主要是通过Oracle创建视图时候的一个属性即or replace来重新创建同名视图来达到修改视图的效果。

删除视图

删除视图的方法和正常删除表的效果相同,通过drop来删除表。即 drop view view_name;。

drop view empv30;

上一篇 下一篇

猜你喜欢

热点阅读