视图经过定制的方式显示包含在一个或多个表(或其它视图)中的数据.视图获取查询的输出结果,并将其作为表来处理. 视图有如下优点: *通过限制对表中预定的一组行和列的访问. *视图隐藏了数据的复杂性. *视图简化了用户的命令,因为视图允许用户从多个表中选择信息,而用户不必实际知道如何执行联接. *视图将应用程序与基表定义的修改隔离开来. *视图通过重命名列,从另一个角度提供数据,而不影响基表. 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 |