oracle视图

来源:互联网 发布:淘宝网羽绒服女款套装 编辑:程序博客网 时间:2024/04/28 08:24

1.视图的定义

视图只是定义了一个查询,是一个虚拟表。视图用于存放查询语句,并不存放真实的数据,视图的数据来自于定义视图的子查询语句中所引用的表,这些表称为视图的基表。视图中的数据与基表的数据同步,这些数据在视图被引用时动态的生成。视图可以建立在一个或多个表(或其他视图)上。


2.视图的存储

视图不会要求分配存储空间,视图中不会包含实际的数据。由于视图基于数据库中的其他对象,因此一个视图只需占用数据字典中保存其定义的空间,而无需额外的存储空间。


3.视图的作用

用户可以通过视图以不同的形式来显示基表中的数据,可以根据不同的需求创建不同的视图。

通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制,隐藏数据复杂性;视图可以使用连接(join),用多个表中相关的列构成一个新的数据集,此视图就对用户隐藏了数据来源于多个表的事实。


4.视图的工作机制

视图的定义就是其使用的查询语句,Oracle将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作: 将引用了视图的语句与视图的定义语句整合为一个语句,在共享SQL 区解析整合后的语句,执行此语句,当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。


5. 查看用户下的所有视图

select view_name from user_views;


当下面创建了视图v_emp后



6.创建视图

create [or replace] [force/noforce] view view_name

[(alias_name[,..])]

as 子查询

[with {check option/read only} constraint constraint_name];

or replace:如果视图已存在,使用此选项可以替换现有试图。

force/noforce:force表示即使基表不存在,又要创建视图;noforce表示如果基表不存在,则不能创建视图。默认为noforce。

alias_name:子查询中列或表达式的别名,别名的个数与子查询中列或表达式的个数必须一致。

check option:除了可以对视图执行select查询外,还可以对视图进行DML操作。默认情况下,可以通过视图对基表的所有数据行进行DML操作,包括视图的子查询无法检索到的行。如果使用check option,则表示只能对视图中子查询能够检索的数据行进行DML操作。

read only:表示通过视图只能读取基表中的数据行,而不能进行DML操作。

constraint constraint_name:为check option/read only约束定义约束名称。

例:create or replace view v_emp

       as select ename from emp;



7.访问视图

select * from v_emp;


查询视图可以带条件但条件里出现的字段必须存在于视图中。


8.若权限不足授予scott用户创建视图的权限

grant create view to scott;




9.查看用户下视图的select语句

select text from user_views where view_name=upper('&view_name');



10.删除视图

drop view v_emp;



11.DML操作(插入,更新,删除)

对视图进行DML操作,实际上就是对视图的基表执行DML操作。但是,并不是视图所有的列都支持DML操作,如果该列进行了函数或数学计算,或者在表的连接查询中该列不属于主表的列,则该列不支持DML操作。from语句中指定的第一个表为主表。

对视图进行DML操作,字段也必须是视图中存在的,基表的数据也会改变。

通过视图向基表中插入数据,通常情况下只提供了表中部分列的数据,而表中其他列的数据则会使用默认值,没有默认值就会使用null,不支持null值,则oracle禁止执行此插入操作。


原创粉丝点击