Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124283
  • 博文数量: 37
  • 博客积分: 2094
  • 博客等级: 大尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-14 08:39
文章分类
文章存档

2010年(37)

分类: Oracle

2010-10-12 09:51:25

视图是数据来自一个或多个表的数据子集的逻辑表示,就像一个窗口,通过该窗口可以查看或改变表中的数据。视图可以基于表,也可以基于视图。
视图主要有以下两大作用:
限制数据访问(因为视图能够选择性的显示表中的列)
简化命令文本(一个视图可以从几个表中取回数据,所以可以构成简单的查询取回复杂的结果)
我们可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据。
简单视图和复杂视图
简单视图:数据仅来自一个表且不包含函数或数据分组,能通过视图执行DML操作
复杂视图:数据来自多个表,包含函数或数据分组,除了查询外,只能进行少数DML操作
创建一个简单视图:
(日的,scott用户居然没有创建视图的权限,本人也懒得给scott用户赋予权限了,就用sys亲自上马操作了)
SQL> show user;
USER is "SYS"
SQL> desc jocky;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FUNCTION_NAME                             NOT NULL VARCHAR2(32)
 DESCRIPTION                                        VARCHAR2(150)
 PARAMETER_LIST                                     VARCHAR2(128)
 RETURN_TYPE                                        NUMBER(2)
 ORIGIN                                             NUMBER(2)
 INTERFACE_NAME                                     VARCHAR2(32)
 OBJECT                                             VARCHAR2(32)
 CAPTION                                            VARCHAR2(64)
SQL> create view sunboy
  2  as select function_name,return_type,object from jocky;
View created.
SQL> select * from sunboy;
FUNCTION_NAME                    RETURN_TYPE OBJECT
-------------------------------- ----------- --------------------------------
SetToArray                                12
Dimension                                 12 Member
Dimension                                 12 Level
Dimension                                 12 Hierarchy
Dimensions                                12
Dimensions                                12
Hierarchy                                 12 Member
创建视图的语法:
CREATE [or replace] [force|noforce] VIEW view [(alias1,alias2,alias3...)] as subquery [with check option [CONSTRAINT constraint]] [with read only [CONSTRAINT constraint]];
诠释:
or replace 如果视图已经存在重新创建它
force 创建视图,而不管基表是否存在
noforce 只在基表存在的情况下创建试图(这是默认值)
view 视图的名字
alias 为由试图查询选择的表达式指定别名(别名的个数必须与由试图选择的表达式的个数匹配)
subquery 是一个完整的select语句(对于在select列表中的字段你可以用别名)
with check option 指定只有可访问的行在视图中才能被插入或修改
constraint 为check option约束指定的名字
with read only 确保在该视图中没有DML操作被执行
创建试图的原则:
定义视图的子查询不能包含order by子句,当你从视图取回数据时可以指定order by子句
如果你没有为用with check option选项创建的视图指定一个约束名字,系统将以sys_cn格式指定一个默认的名字
你可以用or replace选项改变视图的定义而无须删除和重新创建它,或重新授予以前已经授予它的对象权限
那么如何用子查询中的列别名创建视图呢?请看下面的范例:
create view sunboy as
select id employee_id,name employee_name from jocky;
一旦试图被创建,就可以通过查询数据字典试图user_views来看视图的名字和视图的定义
当你用视图存取数据时,oracle服务器执行下面的操作:
1:从数据字典表user_views中取回视图定义
2:检查对视图的基表的数据存取的权限
3:转换视图查询为一个在基表或表上的等价操作
创建一个复杂视图(这玩意以后再论)
管理视图
现记住如下几个要点:
视图无法在创建后修改
要修改视图只能使用重建命令以新的定义重建视图
重建视图的语法如下:create or replace view ...
这个具体的命令我就不敲了,相信所有人都会,当然实在不会的话可以去问google,它是IT人士的good friend!
删除视图
删除视图可以使用drop view命令,删除视图不影响用于建立视图的基表,单色基于以删除视图的其它视图或应用程序就变无效了啦。。。
阅读(1776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~