关于视图的更新问题
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:此处不允许虚拟列
以上知识简单的更新视图的操作,如果视图的查询语句中含有统计操作,则根本就不可能更新!
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:此处不允许虚拟列
以上知识简单的更新视图的操作,如果视图的查询语句中含有统计操作,则根本就不可能更新!
相关文章推荐
- vue2.0关于set添加属性后视图不能更新的问题
- 关于批量数据更新的问题(C#高性能)
- 关于在非C盘安装VS2017后MFC资源视图路径错误的问题
- web项目,关于eclipse编译问题,项目不会自动编译,老是要server remove项目,再布置才会更新编译。
- 关于ViewPager的数据更新问题小结
- 关于VS2008视图切换时IDE停止响应的问题
- 关于LitePal更新数据库无效问题啊
- 关于在JSP中页面展示报错调试的一些问题归纳(持续更新中...)
- 关于从基于Mult-Org的视图中查询数据的问题(转)
- 关于老版ubuntu更新源问题
- 关于智能客户端的自动更新问题
- android关于版本更新问题
- 关于更新Xcode7后VVDocumenter-Xcode安装后无法注释问题解决方案
- 解决关于笔记本电脑更新后USB接口没有反应的问题
- 本地磁盘,不能如预期那样包含关于:“MSDN VS 6.0 Local”的文件。请更新位 问题解决办法
- 关于IT结合测试,事前DB与事后DB的问题(之一:如何能更好的看出更新效果)。
- Ubuntu关于更新源的问题
- 【树莓派学习笔记】关于树莓派2代,更新最新内核后,DS18B20温度传感器无法找到对应文件的问题的解决
- 关于内部类class文件更新问题
- 关于多对多关系表无法更新与插入的问题