我在上面搜索了问题并得到了以下答案
YES - >如果是简单视图的情况(只包含一个基表)。
否---->如果是复杂视图(包含多个基表和连接)。
但是,通过使用“而不是触发器”,可以间接地在复杂视图上执行DML操作。在代替触发器的主体中,我们将使用共同关系标识符和DML语句间接地在复杂视图上执行DML操作。然后,这些更改将反映在该特定复杂视图的基表中。
这里我的问题是应用于视图的更改是否会对原始表产生任何影响?
如果操作单个基表上的视图,更改是否会反映在基表上?
任何人都可以举例说明上述情况吗?
答案 0 :(得分:2)
在 Oracle 中,您可以在以下条件下更新视图:
来自:Oracle database SQL Reference
有关可更新视图的说明
可更新视图是您可以用来插入,更新或删除的视图 基表行。您可以创建一个本质上可更新的视图,或 你可以在任何视图上创建一个INSTEAD OF触发器使其成为
可更新的。了解是否以及以何种方式固有的列 可以修改可更新视图,查询USER_UPDATABLE_COLUMNS数据 字典视图。此视图显示的信息很有意义 仅适用于固有可更新的视图。为了一个内在的观点 可更新,必须满足以下条件:
- 视图中的每个列都必须映射到单个表的列。例如,如果视图列映射到TABLE子句的输出(一个
unnested collection),然后视图本身不可更新。视图不得包含以下任何构造:
集合运算符
DISTINCT运算符
聚合或分析函数
GROUP BY,ORDER BY,MODEL,CONNECT BY或START WITH子句
SELECT列表中的集合表达式
SELECT列表中的子查询
指定为WITH READ ONLY
的子查询加入,但有一些例外,如Oracle数据库中所述 管理员指南
此外,如果固有可更新视图包含伪列或表达式,则无法使用UPDATE更新基表行 引用任何这些伪列或表达式的语句。
如果您希望连接视图可更新,则必须满足以下所有条件:
DML语句必须只影响连接下的一个表。
对于INSERT语句,不能使用CHECK创建视图 OPTION以及插入值的所有列必须来自 一张钥匙保存的桌子。保存密钥的表是每个表 基表中的主键或唯一键值也是唯一的 加入视图。
对于UPDATE语句,必须从中提取更新的所有列 一张钥匙保存的桌子。如果视图是使用CHECK OPTION创建的,那么 连接从更多引用的表中获取的列和列 视图中的一次必须屏蔽UPDATE。
对于DELETE语句,如果连接导致多个密钥保留表,则Oracle数据库将从第一个删除 在FROM子句中命名的表,无论视图是否已创建
选择检查选项。
在 SQL Server 中,您可以在视图中插入,更新和删除行,但受以下限制Source
如果视图包含多个表之间的连接,则只能在视图中插入和更新一个表,并且不能删除行。
您无法根据联合查询直接修改视图中的数据。您无法修改使用GROUP BY或DISTINCT语句的视图中的数据。
所有正在修改的列都受到相同的限制,就像语句直接针对基类执行一样 表
无法通过视图修改文字和图片列。
没有检查查看条件。例如,如果视图选择所有居住在巴黎的客户,并且数据被修改为
添加或编辑没有City ='Paris'的行,数据
将在基表中修改但未在视图中显示,除非
定义视图时使用WITH CHECK OPTION。