【问题标题】:Generating DDL script for object without schema name baked in using DBMS_METADATA.GET_DDL?使用 DBMS_METADATA.GET_DDL 为没有模式名称的对象生成 DDL 脚本?
【发布时间】:2011-07-21 20:23:27
【问题描述】:

如何在没有嵌入架构名称的情况下使用DBMS_METADATA.GET_DDL 为我的对象生成 DDL 脚本?

DBMS_METADATA.GET_DDL:

CREATE TABLE "MYSCHEMA"."MYTABLE"
(
  "COL1"  NUMBER(10,0)
)

SQL Developer 可以做到这一点,我认为它也使用 DBMS_METADATA 来实现这个目标和通用 DDL 脚本。

使用 SQL 开发人员:

CREATE TABLE "MYTABLE"
(
  "COL1"  NUMBER(10,0)
)

【问题讨论】:

标签: oracle dbms-metadata


【解决方案1】:

我最近偶然发现了以下内容,它允许您在没有架构名称的情况下获取 ddl。

尽管它没有包含在任何 Oracle 文档中,但它看起来比我迄今为止看到的任何其他方式都简单得多。我在 SQL Developer 的 Statements Log 中发现了它,它会生成没有模式名称的 ddl。

DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'EMIT_SCHEMA', false);

在调用 DBMS_METADATA.GET_DDL 之前,您不需要获取句柄或任何讨厌的东西,只需执行上述操作即可

【讨论】:

  • 不错的发现,比我的解决方案更容易/更直接!
  • 这对我有用,但接受的答案没有。 (我使用的是 oracle 19。)
【解决方案2】:

将 SET_REMAP_PARAM 与 REMAP_SCHEMA 选项一起使用:

DBMS_METADATA.SET_REMAP_PARAM(th,'REMAP_SCHEMA','HR',NULL);

这会将 HR 模式映射为 NULL(不过,您需要一个作业句柄);有关完整示例,请参阅metadata_api documentation

【讨论】:

  • 这个答案对我不起作用。 EMIT_SCHEMA 的答案虽然有效。
【解决方案3】:

除了删除架构(如上面大卫诺里斯所建议的那样),如果您想删除存储和其他属性。基本上,只是一个普通的 DDL,然后在下面使用:

BEGIN
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', TRUE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', FALSE);      
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'EMIT_SCHEMA', FALSE);
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2020-10-31
    • 1970-01-01
    • 2021-12-01
    • 2019-08-22
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多