如何正确使用CONSTRAINTS_AS_ALTER进行GET_DDL?

时间:2012-06-13 18:58:33

标签: database oracle database-schema ddl dbms-metadata

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根本不产生任何约束?

有没有办法让表格以正确的顺序创建?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过运行:

告诉GET_DDL不生成参照完整性约束
exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', FALSE);

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

请参阅here了解转换参数列表。