深入Oracle视图编写的示例(1)(3)
删除视图
可以删除当前模式中的任何视图;如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。视图被删除后,其他引用该视图的视图及存储过程等都会失效。
示例1:drop view vw_test_tab;
查看视,使用数据字典视图
- dba_views――DBA视图描述数据库中的所有视图
- all_views――ALL视图描述用户“可访问的”视图
- user_views――USER视图描述“用户拥有的”视图
- dba_tab_columns――DBA视图描述数据库中的所有视图的列(或表的列)
- all_tab_columns――ALL视图描述用户“可访问的”视图的列(或表的列)
- user_tab_columns――USER视图描述“用户拥有的”视图的列(或表的列)
- 示例1:查询当前方案中所有视图的信息
- desc user_views;
- set long 400;
- select view_name,text from user_views;
- 示例1:查询当前方案中指定视图(或表)的列名信息
- select * from user_tab_columns where table_name='VW_DEPT';
在连接视图上执行DML操作
在视图上进行的所有DML操作,最终都会在基表上完成;select 视图没有什么限制,但insert/delete/update有一些限制
在视图上执行DML操作的步骤和原理
第一步:将针对视图的SQL语句与视图的定义语句(保存在数据字典中)“合并”成一条SQL语句
第二步:在内存结构的共享SQL区中“解析”(并优化)合并后的SQL语句
第三步:“执行”SQL语句
示例:假设视图v_emp的定义语句如下:
- create view v_emp
- as
- select empno,ename,loc
- from employees emp,departments dept
- where emp.deptno=dept.deptno and dept.deptno=10;
- 当用户执行如下查询语句时:
- select ename from v_emp
- where empno=9876;
- oracle将把这条SQL语句与视图定义语句“合并”成如下查询语句:
- select ename
- from employees emp,departments dept
- where emp.deptno=dept.deptno and dept.deptno=10
- and empno=9876;
然后,解析(并优化)合并后的查询语句,并执行查询语句
- 上一篇:将Oracle转移到海量数据的实操
- 下一篇:Oracle缓存表学习笔记讲解