我使用 select
和 union
创建了一个表,如下所示:
create table tableC as
select column1, column2 from tableA
union all
select column1, column2 from tableB
生成的表 (tableC
) 没有继承 tableA
或 tableB
的任何约束。为什么约束没有复制到新表中?
最佳答案
使用select ... as ...
创建表从不复制约束。如果您希望新表继承原表的约束,则必须手动创建新约束。
正如 @Davek 指出的,not null
约束将从单个表 select ... as ...
中复制。我想这是因为它们都是列属性和约束。然而,一旦该列有多个来源,Oracle 就不会尝试应用该约束,这是合理的。
在回答后续问题“是否可以为 tableC
提供来自 tableA
或 tableB
的相同约束,之后CTA?”:
当然这是可能的,但是没有一个命令可以做到这一点。您可以编写一个使用动态 SQL 来复制约束的过程。但是,除非您希望自动执行此行为,否则使用 IDE 提取 DDL 并更改表名称通常会更容易。
关于oracle - 使用 select union 创建表没有约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514166/