0
exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', TRUE);

SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner) FROM all_OBJECTS WHERE  
OWNER = 'USERNAME' AND OBJECT_TYPE = 'TABLE';

当我运行这些命令时,不幸的是,我在每个表之后都得到了 alter 语句。我更愿意为我的所有表生成 DDL,然后在之后使用 alter 语句来设置约束。目前,alter 语句对某些表运行并失败,因为所引用的表尚未创建。

我见过这个命令:

select dbms_metadata.get_ddl('CONSTRAINT',constraint_name) from user_constraints; 

但是要使用它,我是否不必以某种方式告诉GET_DDL根本不产生任何约束?

有什么方法可以让表格以正确的顺序创建吗?

谢谢!

4

1 回答 1

2

您可以GET_DDL通过运行以下命令来告知不生成参照完整性约束:

exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', FALSE);

然后运行约束 DDL,但仅where constraint_type = 'R'. (您不想单独运行所有约束,否则您需要在外键之前生成主键,并遇到相同的依赖问题。)

有关转换参数的列表,请参见此处

于 2012-06-14T05:49:04.007 回答