【问题标题】:How do I properly use CONSTRAINTS_AS_ALTER for GET_DDL?如何正确使用 CONSTRAINTS_AS_ALTER 进行 GET_DDL?
【发布时间】:2012-06-13 18:58:33
【问题描述】:
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 根本不生成任何约束?

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    你可以告诉GET_DDL不要通过运行来生成参照完整性约束:

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

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

    有关变换参数列表,请参阅here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2016-04-30
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      相关资源
      最近更新 更多