【问题标题】:plsql. is there way to get column ddl?plsql。有没有办法获得列 ddl?
【发布时间】:2022-01-08 17:08:38
【问题描述】:

我使用 dbms_metadata.get_ddl(...) 来获取对象 ddl,但它不会为列生成 ddl。 有没有办法获得列 ddl oracle 12 版本?

谢谢

【问题讨论】:

  • “列 DDL”对您意味着什么?列的 DDL 以何种方式不是对象的 DDL 的一部分?一个准确显示您正在看到的内容以及您希望看到的内容的示例将非常有帮助。
  • 我有表名和列名,我想得到像'alter table t add c number default 1 not null'这样的ddl
  • 您应该编辑问题以更好地表达您的问题,而不是发表评论。
  • 正如@BarbarosÖzhan 解释的那样,您应该编辑您的问题以完成您所询问的信息,如果有很多 cmets,评论可能会丢失。无论如何,你不会用 get_ddl 函数得到一个 ALTER TABLE,那个 DDL 是修改一个对象,get_ddl 给你现有对象的 DDL。
  • 为什么你想要一个alter table 来添加列,而不仅仅是 DDL 来创建包括列在内的整个表?我能想到你想要的唯一原因是如果你试图生成 DDL 以收敛两个不同的对象。如果是这样,你会想要使用 dbms_metadatadbms_metadata_diff 包 (docs.oracle.com/database/121/SUTIL/…)。

标签: oracle plsql oracle12c ddl


【解决方案1】:

我认为以下查询可能对您有用。

SELECT *
    FROM ADMIN.DDL_HISTORY_LOG L
 WHERE L.OBJECT_TYPE = 'TABLE'
             AND L.DDL = 'ALTER'
             AND L.OBJECT_NAME = 'TABLE_NAME' --just change table name here
             AND UPPER(L.DDL_SQL) LIKE '%ALTER%TABLE%ADD%'
             AND UPPER(L.DDL_SQL) NOT LIKE '%ADD%CONSTRAINT%'

这个 oracle 字典包含所有历史 DDL 语句。所以,如果你指定你的表名,你可以得到这个表过去所有的DDL语句。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多