标签:
视图一个虚拟表,它同真实表一样包含一系列带有名称的列和行数据。
但是视图并不在数据库中存储真实值,数据库只在数据字典中存储了视图定义本身。
用户可以在视图中进行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子句约束)。
标签:
原文地址:http://blog.csdn.net/u010999240/article/details/44204125