oracle视图
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禁止执行此插入操作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |