oracle - 使用 select union 创建表没有约束

标签 oracle oracle10g create-table

我使用 selectunion 创建了一个表,如下所示:

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

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

最佳答案

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


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


在回答后续问题“是否可以为 tableC 提供来自 tableAtableB 的相同约束,之后CTA?”:

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

关于oracle - 使用 select union 创建表没有约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514166/

相关文章:

sql - 尝试从IN语句生成子集

oracle plsql : retrieve runtime parameter values when you call a procedure

oracle10g - 使用 Oracle 10g 配置 Informatica Repository [Oracle 未连接]

php - ORA-24374 : define not done before fetch or execute and fetch

sql - 如果不存在,PostgreSQL 创建表

mysql - 如何在 MySQl 5.0 中将整数列添加到字符串列

postgresql - 如何在包含长度和精度参数的 postgreSQL 中创建 regtype 列

sql-server-2005 - Sql server 2005 中的分析函数

java - 当引用 Java 对象模型中的关联时,为引用分配 null 值背后的相关性是什么?

sql - 动态 SQL 或 WITH 子句