sql - 通过连接一个视图和另一个表创建的表所做的更改会影响基于原始表视图吗?
问题描述
假设我在表上创建了一个视图。如果我更改视图中的某些记录,则原始表也会更改。如果我将此视图与另一个表连接并更改我通过连接获得的此结果表上的一些记录,会更改基于哪个视图的原始表吗?
解决方案
原则上,是的,如果视图的构建方式使得基础表可以通过视图进行更新。例如,假设我有一个名为 TABLE_1 的表并创建一个视图 VIEW_1,如下所示:
CREATE OR REPLACE VIEW VIEW_1 AS
SELECT *
FROM TABLE_1
如果我发布更新声明
UPDATE VIEW_1
SET FIELD_N = 'XYZ'
WHERE KEY_1 = 123
Oracle 足够聪明,可以将 UPDATE 传递到基础表,并且 TABLE_1 将被更新。
然而,任何复杂的视图很可能包含使视图不可更新的操作。因此,假设我有以下 VIEW_2:
CREATE OR REPLACE VIEW VIEW_2 AS
SELECT KEY_1,
FIELD_N,
SUM(SOME_OTHER_FIELD) AS OTHER_SUM,
MIN(YADDA_YADDA) AS MIN_YADDA
FROM TABLE_1
GROUP BY KEY_1,
FIELD_N
此视图的更新将失败并出现ORA-01732: data manipulation operation not legal on this view
错误。因此,您是否可以通过视图进行更新很大程度上取决于视图正在执行的操作。
推荐阅读
- javascript - react-socks 不能通过我的图标立即工作
- python - 修复 422 响应 python 请求获取
- r - R函数用任何整数替换字符
- android-studio - 使用 DragLinearLayout 时如何获取子位置
- python - 使用多边形坐标将带注释的图像转换为二进制蒙版图像
- gitlab - 尝试从 GitLab 将自定义 Helm 存储库添加到本地时出错
- python - 如何从 Python 中的字符串数组中删除正斜杠?
- python - 是否可以相对于屏幕尺寸设置海龟的位置
- flutter - NoSuchMethodError 被抛出构建选项卡(脏,状态:_TabsState#fefcf):方法 '[]' 在 null 上被调用
- sql - 我们可以更新定义为在不同表中定义的唯一记录的外键的记录吗?