我使用select
使用union
创建了一个表格,如下所示:
create table tableC as
select column1, column2 from tableA
union all
select column1, column2 from tableB
结果表(tableC
)未继承tableA
或tableB
中的任何约束。为什么没有将约束复制到新表中?
答案 0 :(得分:2)
使用select ... as ...
创建表永远不会复制约束。如果希望新表继承原始表中的约束,则必须手动创建新约束。
正如@Davek指出的那样,not null
约束将从单个表select ... as ...
中复制。我想是因为它们都是列属性和约束。但是,一旦列有多个源,Oracle就不会尝试应用该约束。
回答后续问题"是否可以在CTA之后从tableC
或tableA
提供tableB
相同的约束?&#34 ;:
当然有可能,但没有一个命令可以做到。您可以编写一个使用动态SQL来复制约束的过程。但是,除非您希望自动执行此行为,否则通常可以更轻松地使用IDE提取DDL并更改表名。