Sql 是否从表/视图创建表?
我有一个奇怪的场景。我试着看看是否能在这个主题上找到任何帮助,但我要么不知道如何正确地搜索它,要么什么也找不到 下面是一个场景 我有一个表a。从表T_a,我创建了一个视图V_B。现在,我可以对V_B进行更新,它工作得很好。然后,当我创建一个视图V_C,它是T_a和T_D的并集时,视图V_C是不可更新的。我理解这种情况背后的逻辑 但我的问题是,在合并两个表并能够进行更新的情况下,我能做些什么 也许在某种程度上,桌子会延伸到桌子上Sql 是否从表/视图创建表?,sql,oracle,view,Sql,Oracle,View,我有一个奇怪的场景。我试着看看是否能在这个主题上找到任何帮助,但我要么不知道如何正确地搜索它,要么什么也找不到 下面是一个场景 我有一个表a。从表T_a,我创建了一个视图V_B。现在,我可以对V_B进行更新,它工作得很好。然后,当我创建一个视图V_C,它是T_a和T_D的并集时,视图V_C是不可更新的。我理解这种情况背后的逻辑 但我的问题是,在合并两个表并能够进行更新的情况下,我能做些什么 也许在某种程度上,桌子会延伸到桌子上 一些额外信息:T_A有项目1-10,T_D有项目100-200。我想
一些额外信息:T_A有项目1-10,T_D有项目100-200。我想加入它们,这样就有了一个表/视图,它是可更新的,有1-10和100-200项 如果您有一个不可更新的视图,您可以通过在视图上定义来始终使其可更新。这意味着您需要实现逻辑来确定如何将视图中的DML转换为一个或两个基表中的DML。在您的例子中,这似乎是确定要更新两个表中的哪一个的逻辑 不过有几点
T\u A
和T\u D
具有非重叠的数据,则使用联合
是没有意义的,它具有隐式不同的
。您几乎肯定希望使用更便宜的UNION-ALL
李>
ITEM\u类型
,即a
或D
,似乎更有意义UNION ALL
并具有(或添加)非重叠约束,从而允许您将视图转换为可更新视图,则可以使视图可更新。这在Oracle中已经存在很长一段时间了,但是在最近的版本中,您不会找到很多关于它的文档,因为Oracle分区对于今天的绝大多数用例来说是一个更好的解决方案。但是旧的7.3.4文档应该仍然有效我不知道A是否合适,但也许值得一读?不。不幸的是,它不合适。我的更多是图A的项目1-10,图D的项目100-200。我想加入它们,这样就有了一个包含项目1-10和100-200的表/视图。我想分区表(或者可能是旧的、不推荐使用的分区视图)可能适合这里?