Oracle视图能够进行DML操做的条件

条件一:在链接视图中不能有Order by、Group by、connetc by等语句排序语句。
条件二:基础表中全部的NOT NULL列都必须在这个视图中。
条件三:须要更新的列不是虚拟列。
条件四:不可以具备分组函数。函数

除了以上几个限制条件以外,若须要在视图上进行DML操做的话,则在创建视图的Select语句中,还不可以有集合运算符、子查询等等。以上这些是一些必需要知足的基本条件,缺一不可。不然的话,针对视图的DML操做,就会以失败了结。spa

可是,并非说符合了上面这个几个条件后,视图就能够畅所无阻的进行数据更新了,其仍然必须符合必定的规则。这其中,最重要的就是键值保存表规则。orm

若是链接视图中的一个基础表的键在他的视图中仍然存在,而且在链接视图中仍然是主键,则这个基础表就为键值保存表。在链接视图上,对视图进行插入、删除、更新等操做时,一次只可以对视图中的一个键值保存表进行更新。排序

with check option对于违反视图选择范围的数据行被插入,将受WITH CHECK OPTION检查it


视图上的DML 操做: 
DML操做应遵循的原则: 
1.简单视图能够执行DML操做; 
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行; 
3.在视图不出现下列状况时可经过视图修改基表数据或插入数据: 
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字; 
b.使用表达式定义的列; 
c.ROWNUM伪列。 
d.基表中未在视图中选择的其余列定义为非空且无默认值。 
WITH CHECK OPTION 子句 
经过视图执行的INSERTS和UPDATES操做不能建立该视图检索不到的数据行, 由于它会对插入或修改的数据行执行完整性约束和数据有效性检查。 (也就是说在执行INSERTS、UPDATES时,WHERE条件中除须要INSERT、UPDATE自己的限制条件以外,还须要加上视图建立时的WHERE条件。)io

相关文章
相关标签/搜索