Oracle 如何在create语句中禁用检查数据集成(引用不存在的表)

Oracle 如何在create语句中禁用检查数据集成(引用不存在的表),oracle,foreign-keys,Oracle,Foreign Keys,假设我有一个空数据库,我想创建两个表。他们之间有关系。例如,R中的一个属性(称为b)是外键。定义应(数据库为空,我尚未执行任何语句)如下所示: 若我试着用上面的语句运行脚本,我会得到错误(根据行:b类型引用S(b)),因为S不存在——这是正常和自然的。是否可以禁用现有表的检查,以响应外键 我知道我可以改变陈述的顺序。或者创建没有约束的表,稍后再添加它们 我为什么这么问。假设我们有很多表,它们之间有很多关系。当我们需要准备某种“备份脚本”时,手动排序表将消耗大量时间 我知道可以按如下方式禁用约束:

假设我有一个空数据库,我想创建两个表。他们之间有关系。例如,R中的一个属性(称为b)是外键。定义应(数据库为空,我尚未执行任何语句)如下所示:

若我试着用上面的语句运行脚本,我会得到错误(根据行:b类型引用S(b)),因为S不存在——这是正常和自然的。是否可以禁用现有表的检查,以响应外键

我知道我可以改变陈述的顺序。或者创建没有约束的表,稍后再添加它们

我为什么这么问。假设我们有很多表,它们之间有很多关系。当我们需要准备某种“备份脚本”时,手动排序表将消耗大量时间

我知道可以按如下方式禁用约束:

alter table table_name disable constraint_name;

但这适用于insert语句。有一种适合创建语句的解决方案?

您可以要求Oracle推迟检查是否违反了约束。不能创建引用不存在对象的约束。为什么不先创建表(按照您想要的顺序),然后再创建约束?这通常是为多个对象生成DDL的工具处理这个问题的现成方法。我知道有针对性的解决方案是最合理的解决方案之一,并且有生成备份脚本的内置机制。我只是想知道是否有可能像我在第一篇文章中写的那个样禁用这个机制。我之所以问这个问题,是因为我有一个按随机顺序排列的insert语句列表,这就导致了外键冲突问题(我不知道如何正确排列这个列表,这不是我的问题)。如果你的问题是按随机顺序排列的
insert
语句列表,然后很容易创建延迟约束,这些约束在提交事务之前不会强制执行。这与创建引用不存在的对象的约束非常不同。您可以使用
CREATE SCHEMA
语法来实现这一点,就像在我对的回答中一样。然后Oracle将一次创建所有表并解析所有依赖项。尽管您可能仍然需要修改输出,例如删除分号。@jonerles-谢谢,我一直在寻找类似的东西。
alter table table_name disable constraint_name;