检测Oracle UDT列

问题描述

我有一个查询,该查询从oracle数据字典中获取表的架构,并且我希望能够检测到它的哪一列是UDT-用户定义的类型列。以下sql是否合理?

select * from
all_tab_cols
    join all_types on all_tab_cols.DATA_TYPE_OWNER = all_types.owner
    and all_tab_cols.DATA_TYPE = all_types.TYPE_NAME
where ALL_TAB_COLS.owner not in ('SYS','SYstem','XDB')

解决方法

是的,这几乎是您所需要的。差异确实取决于您认为值得包括或不包括的内容。例如。

  • PUBLIC(在ALL_TAB_COLS中)拥有某些复杂的数据类型,但它们的真实类型通常由SYS在ALL_TYPES中拥有
  • 您可能还希望包含/排除其他模式(MDSYS,APEX ...等)