关于视图的更新问题
来源:互联网 发布:js md5算法 编辑:程序博客网 时间:2024/06/04 18:52
首先创建一个示例视图:
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添加属性后视图不能更新的问题
- 关于更新视图
- iOS视图更新问题
- ReactNative FlatList state更新,视图不更新的问题
- 关于批量更新的问题
- 关于博客的更新问题
- 关于地图的更新问题
- 关于Cocoapods更新的问题
- 关于listview 的更新问题
- 关于viewDidUnload导致视图reload的问题
- 关于Android视图Measue阶段的问题
- 更新所有的视图
- 视图更新的限制
- 更新视图的方法
- 安装cucumber 后出现的问题
- 【insigma】Socket
- Windows7下使用Dev-C 编译 JNI
- 从DLL中导出变量 ——DLL入门浅析
- 如何判断fork之后的子进程是否已经结束
- 关于视图的更新问题
- ListView有背景图片或背景颜色,那么在滑动ListView的时候,ListView的背景会变黑
- MFC生成GUID
- 是否处于设计状态(处于VS设计界面)
- CPCL命令打印24位bmp
- Eclipse快捷键大全(转载)
- 如何修改TortoiseSVN的Log日志
- sql取两位小数
- 启发式搜索