使用DBMS_METADATA.GET_DDL为没有模式名称的对象生成DDL脚本?

时间:2011-07-21 20:23:28

标签: oracle dbms-metadata

如何使用DBMS_METADATA.GET_DDL为我的对象生成DDL脚本,而不插入架构名称?

使用DBMS_METADATA.GET_DDL

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

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

使用SQL Developer:

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

3 个答案:

答案 0 :(得分:16)

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

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

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

在调用DBMS_METADATA.GET_DDL

之前,您不需要获取句柄或任何令人讨厌的EXEC上述内容

答案 1 :(得分:6)

将SET_REMAP_PARAM与REMAP_SCHEMA选项一起使用:

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

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

答案 2 :(得分:0)

如果要删除存储和其他属性,则除了删除架构(如上文David Norris所建议)。基本上,只是一个普通的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;