2012-06-13 22 views
1
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语句运行并失败,因为被引用的表尚未创建。如何正确使用CONSTRAINTS_AS_ALTER作为GET_DDL?

我看到这个命令:

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

但使用该不会我必须以某种方式告诉GET_DDL不产生在所有的任何约束?

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

谢谢!

回答

2

你可以告诉GET_DDL不运行产生参照完整性约束:

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

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

有关变换参数的列表,请参见here