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
根本不产生任何约束?
有没有办法让表格以正确的顺序创建?
谢谢!
答案 0 :(得分:2)
您可以通过运行:
告诉GET_DDL
不生成参照完整性约束
exec dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'REF_CONSTRAINTS', FALSE);
然后运行约束DDL,但只运行where constraint_type = 'R'
。 (您不希望单独运行所有约束,否则您将需要在外键之前生成主键,并遇到相同的依赖性问题。)
请参阅here了解转换参数列表。