Oracle视图

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子句约束)。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。