码迷,mamicode.com
首页 > 数据库 > 详细

Oracle视图

时间:2015-03-11 21:44:32      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

Oracle视图

简单视图

视图一个虚拟表,它同真实表一样包含一系列带有名称的列和行数据。
但是视图并不在数据库中存储真实值,数据库只在数据字典中存储了视图定义本身。

用户可以在视图中进行INSERT、UPDATE和DELETE操作。通过视图修改数据时,实际上是在修改基本表中存储的数据。

视图可以建立在关系表上,也可以建立在其他视图上,或者同时建立在两者之上。创建视图,主要是为了将一个或者多个表中经常使用到的数据结合带一起,方便用户的数据操作。

一个比较简单的视图,只能通过它从基本表中检索数据,而不能通过它修改基本表中的数据。创建视图最基本的语法如下:

CRAETE [OR REPLACE] VIEW view_name
AS <SELECT 语句>;
[WITH CHECK OPTION]

其中,WITH CHECK OPTION选项用来定义一个规范。

例1:
针对student表创建一个视图:

CREATE OR REPLACE VIEW stu_view
AS 
SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX=‘F‘

或者

CREATE OR REPLACE VIEW stu_view(编号,姓名,年龄,性别)
AS 
SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX=‘F‘

可以通过数据字典来查看视图信息:

SELECT TEXT FROM user_views WHERE view_name=UPPER(‘stu_view‘)

其结果如下:

SELECT SID,SNAME,SAGE,SSEX FROM student WHERE SSEX=’F’

可更新视图

一个视图能否更新取决于创建该视图的语句,一般来说,创建的视图越复杂,其被更新的可能性就越小。

创建如下视图:

CREATE OR REPLACE VIEW stu_age_view(SID,SNAME,SAGE,SSEX)
AS 
SELECT SID,SNAME,SAGE+1,SSEX FROM student 

对其进行更新:

UPDATE stu_age_view SET sname=‘SIEGE‘ WHERE sname=‘SAM‘

修改成功。

再对其年龄列进行更改:

UPDATE stu_age_view SET sage=10 WHERE sname=‘SIEGE‘

此时报ORA-01733错误(不允许修改虚拟列)

我们可以根据数据字典查看视图的那些列可以进行修改:

SELECT column_name,UPDATABLE,insertable,deletable FROM
user_updatable_columns WHERE table_name=UPPER(‘stu_age_view‘)

其结果如下:

  COLUMN_NAME UPDATABLE   INSERTABLE  DELETABLE
      SID                         YES           YES                 YES
      SNAME                  YES            YES                 YES
      SAGE                      NO            NO                 NO
      SSEX                       YES            YES               YES

说明姓名列不可以更改。

若指定WITH CHECK OPTION时:

CREATE OR REPLACE VIEW stu_check_view(SID,SNAME,SAGE,SSEX)
AS 
SELECT SID,SNAME,SAGE,SSEX FROM student  WHERE sname=‘SIEGE‘
WITH CHECK OPTION 

此时,若修改视图:

UPDATE  stu_check_view SET sname=‘kate‘

则会出现ORA-01402错误(违反WITH CHECK OPTION子句约束)。

Oracle视图

标签:

原文地址:http://blog.csdn.net/u010999240/article/details/44204125

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!