Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104574255
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 16:16:26

 

视图经过定制的方式显示包含在一个或多个表(或其它视图)中的数据.视图获取查询的输出结果,并将其作为表来处理.
视图有如下优点:
*通过限制对表中预定的一组行和列的访问.
*视图隐藏了数据的复杂性.
*视图简化了用户的命令,因为视图允许用户从多个表中选择信息,而用户不必实际知道如何执行联接.
*视图将应用程序与基表定义的修改隔离开来.
*视图通过重命名列,从另一个角度提供数据,而不影响基表.
OK,为方便测试,下面提供两个表,结构如下:
emp表:
Name   Type  
-------- ------------
EMPNO   NUMBER(4)        
ENAME   VARCHAR2(10)      
JOB   VARCHAR2(9)      
MGR   NUMBER(4)        
HIREDATE DATE          
SAL   NUMBER(7,2)      
COMM   NUMBER(7,2)        
DEPTNO   NUMBER(2)  

dept表:
Name   Type  
------ ------------
DEPTNO NUMBER(2)      
DNAME VARCHAR2(14)      
LOC   VARCHAR2(13)
OK,下面就来创建视图实例.
create or replace view v_emp as
select empno,ename,job,sal from emp where deptno=10 with check option ;
上面创建视图的条件为deptno=10,而with check option 是被规定为不能修改视图条件约束,也就是说,修改视图时不能修改其条件deptno=10.其后也可以跟 with read only,这样只能对视图查询而其它DML操作将不能用.
OK,我们下面就来创建联结视图.
实例如下:
create or replace view v_emp as
select empno,ename,job,sal,d.deptno
from emp e,dept d
where e.deptno=d.deptno
在联接视图中,如果视图包含了一个表的主键,并且也是这个视图的主键,则这个键被保留,这个表称为键保留表,oracle可以通过此视图向表中插入行.包含外部联接的视图通常不包含键保留表,除非外部联接生成非空的值.oracle可以确定哪些表是键保留的,只有键保留表才能使用DML语句.如下举个例,如果操作此语句:update v_emp set deptno=30 where empno=7782,修改其empno,则会出错,因为
emp表被视为键保留表,empno既是emp中的主键,也是视图中的主键,而depno列是在非键保留表中,所以不能被修改.

而下面语句则执行成功:
update v_emp set ename='aaa' where empno=7782,因为ename为键保留表中的列,所以能被修改.
OK,实践下哦.

原文:http://hujing1229.blog.ccidnet.com/blog-htm-do-showone-uid-60604-type-blog-itemid-184607.html

阅读(191) | 评论(0) | 转发(0) |
0

上一篇:索引

下一篇:同义词、序列

给主人留下些什么吧!~~