您的位置:首页 > 其它

关于视图的更新问题

2012-08-20 18:19 302 查看
首先创建一个示例视图:

CREATE OR REPLACE VIEW myview AS

SELECT *FROM emp WHERE deptno=20;

创建视图的时候存在两个选项:

选项一:WHIT CHECK OPTION;

上面创建的视图,存在一个创建条件“WHERE deptno=20”,现在我们更新这个视图:

UPDATE myview SET deptno=30 WHERE empno=7369;(执行此语句,不报错)

此时更新的是一张视图,但是视图本身并不是一个具体的数据表,而现在更新的操作又是

视图的创建条件,很明显这样的做法不可取!

此时为了解决这个问题,可以加入WHIT CHECK OPTION:

CREATE OR REPLACE VIEW myview AS

SELECT *FROM emp WHERE deptno=20

WHIT CHECK OPTION;

此时再次执行更新操作:

UPDATE myview SET deptno=30 WHERE empno=7566;

报错:

ORA-01402;视图 WHIT CHECK OPTION where 子句违规

意味着现在不能更新视图的创建条件!

选项二:WHIT READ ONLY

虽然使用了WHIT CHECK OPTION可以保证视图的创建条件不被更新,但是这个条件并不能

保证其他的字段不被更新。

UPDATE myview SET sal=9000 WHERE empno=7369;(执行此语据,没有报错。)

于之前的问题一样,视图本身不是真是的数据,而是一些查询语句,所以这样的更新仍然不合理!

对于此,我们可以使用WHIT READ ONLY,将其设置为只读视图!

CREATE OR REPLACE VIEW myview AS

SELECT *FROM emp WHERE deptno=20

WHIT READ ONLY;

此时再次进行更新操作,

UPDATE myview SET sal=9000 WHERE empno=7655;

则直接报错:

ORA-01733:此处不允许虚拟列

以上知识简单的更新视图的操作,如果视图的查询语句中含有统计操作,则根本就不可能更新!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: