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

发布于 2024-11-25 12:25:34 字数 361 浏览 1 评论 0原文

如何使用 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)
)

How can I generate the DDL script for my object with DBMS_METADATA.GET_DDL without the schema name baked in?

With DBMS_METADATA.GET_DDL:

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

SQL Developer can do that, and I think it's also uses the DBMS_METADATA to achive this goal and generale DDL scripts.

With SQL Developer:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

纸短情长 2024-12-02 12:25:34

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

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

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

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

I recently stumbled upon the following which allows you to get ddl without the schema name.

It looks a lot simpler than any other way I have seen so far although its not included in any Oracle documentation. I spotted it in the Statements Log in SQL Developer, which generates ddl without the schema name.

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

You don't need to get handles or anything nasty just EXEC the above before calling DBMS_METADATA.GET_DDL

月依秋水 2024-12-02 12:25:34

将 SET_REMAP_PARAM 与 REMAP_SCHEMA 选项结合使用:

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

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

Use SET_REMAP_PARAM with the REMAP_SCHEMA option:

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

This will map the HR schema to NULL (you'll need a job handle, though); for a full example, see metadata_api documentation

暖伴 2024-12-02 12:25:34

除了删除架构(如上面 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;

In addition to removing schema(As suggested by David Norris above), if you want to remove storage and other attributes. Basically, just a plain DDL, then use below :

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文