使用select union创建表没有约束

时间:2014-10-22 18:07:12

标签: oracle oracle10g create-table

我使用select使用union创建了一个表格,如下所示:

create table tableC as
select column1, column2 from tableA
union all
select column1, column2 from tableB

结果表(tableC)未继承tableAtableB中的任何约束。为什么没有将约束复制到新表中?

1 个答案:

答案 0 :(得分:2)

使用select ... as ...创建表永远不会复制约束。如果希望新表继承原始表中的约束,则必须手动创建新约束。


正如@Davek指出的那样,not null约束将从单个表select ... as ...中复制。我想是因为它们都是列属性和约束。但是,一旦列有多个源,Oracle就不会尝试应用该约束。


回答后续问题"是否可以在CTA之后从tableCtableA提供tableB相同的约束?&#34 ;:

当然有可能,但没有一个命令可以做到。您可以编写一个使用动态SQL来复制约束的过程。但是,除非您希望自动执行此行为,否则通常可以更轻松地使用IDE提取DDL并更改表名。