本帖最后由 fteair 于 2017-7-28 14:31 编辑
一、视图的定义 视图也称为虚表,视图本身不占用物理存储空间,视图存放于数据字典中,简单的来说视图可以看做是sql语句的集合。视图从数据库中的表产生,这些表称为视图的基表,一个视图可以从另一个视图中产生。 视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。 tips:对视图的查询没有限制,对视图的插入、删除、更新一般会有限制,所以为防止通过视图来修改基表的数据可以将视图创建为只读(带with read only) 二、视图的作用 [size=13.312px]1)提供各种数据表现形式, 可以使用各种不同的方式将基表的数据展现在用户面前, 以便符合用户的使用习惯(主要手段: 使用别[size=13.312px]名); [size=13.312px]2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句一般是比较复杂的, 而且用户需要了解表之间的关系, 否则容易写错; 如果[size=13.312px]基于这样的查询语句创建一个视图, 用户就可以直接对这个视图进行"简单查询"而获得结果. 这样就隐藏了数据的复杂性并简化了查询语句.[size=13.312px]这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义); [size=13.312px]3)执行某些必须使用视图的查询. 某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一[size=13.312px]表, 这时就可以先基于分组统计的结果创建一个视图, 然后在查询中连接这个视图和另一个表就可以了; [size=13.312px]4)提供某些安全性保证. 视图提供了一种可以控制的方式, 即可以让不同的用户看见不同的列, 而不允许访问那些敏感的列, 这样就可[size=13.312px]以保证敏感数据不被用户看见; [size=13.312px]5)简化用户权限的管理. 可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。 [size=13.312px]三、视图创建 [size=13.312px]SQL> create view vw_emp as select empno,ename,job,hiredate,deptno from emp;
[size=13.312px] SQL> select * from vw_emp where deptno=10; [size=13.312px] MPNO ENAME JOB HIREDATE DEPTNO [size=13.312px]---------- ---------- --------- ---------
7782 CLARK MANAGER 09-JUN-81 10 7839 KING PRESIDENT 17-NOV-81 10 7934 MILLER CLERK 23-JAN-82 10 对简单视图进行DML操作: SQL> insert into vw_emp values(1,'a','aa','05-JUN-88',10);
SQL> update vw_emp set ename='cc' where ename='KING';
SQL> delete vw_emp where ename='cc';
SQL> select * from vw_emp where deptno=10 EMPNO ENAME JOB HIREDATE DEPTNO
---------- ---------- --------- --------- ---------
7782 CLARK MANAGER 09-JUN-81 10
7934 MILLER CLERK 23-JAN-82 10
1 a aa 05-JUN-88 10 基表也发生了相应的更改: SQL> select empno,ename,job,hiredate,deptno from emp where deptno=10; 创建只读视图: SQL> create view vw_emp_readonly as select empno,ename,job,hiredate,deptno from emp with read only; 删除视图: 可以删除当前模式中的任何视图;
如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;
视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。视图被删除后,其他引用该视图的视图及存储过程等都会失效。 drop view vw_test; 四、查看视图: 使用数据字典视图
1 dba_views——DBA视图描述数据库中的所有视图
2 all_views——ALL视图描述用户“可访问的”视图
3 user_views——USER视图描述“用户拥有的”视图
4 dba_tab_columns——DBA视图描述数据库中的所有视图的列(或表的列)
5 all_tab_columns——ALL视图描述用户“可访问的”视图的列(或表的列)
6 user_tab_columns——USER视图描述“用户拥有的”视图的列(或表的列)
|