Sql 是否从表/视图创建表?

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。我想

我有一个奇怪的场景。我试着看看是否能在这个主题上找到任何帮助,但我要么不知道如何正确地搜索它,要么什么也找不到

下面是一个场景

我有一个表a。从表T_a,我创建了一个视图V_B。现在,我可以对V_B进行更新,它工作得很好。然后,当我创建一个视图V_C,它是T_a和T_D的并集时,视图V_C是不可更新的。我理解这种情况背后的逻辑

但我的问题是,在合并两个表并能够进行更新的情况下,我能做些什么

也许在某种程度上,桌子会延伸到桌子上


一些额外信息: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的表/视图。我想分区表(或者可能是旧的、不推荐使用的分区视图)可能适合这里?