【问题标题】:Get column name, data type, size and comments of Oracle table获取Oracle表的列名、数据类型、大小和注释
【发布时间】:2017-06-26 08:15:47
【问题描述】:

如何获取表的列名、数据类型、大小和cmets?

我试过了

SELECT all_tab.column_name, all_tab.data_type, all_tab.data_length, col_com.COMMENTS 
    FROM all_tab_columns all_tab
        JOIN user_col_comments col_com ON all_tab.TABLE_NAME = col_com.TABLE_NAME
    WHERE all_tab.TABLE_NAME='MY_TABLE'

但是没有用。

【问题讨论】:

  • 您的查询对我来说没问题。检查表的名称以及您对该表的权限
  • “没用”是什么意思?错误的结果?错误 ?您还加入了 ALL_ 和 USER_ 视图,因此只会显示您正在运行的架构实际拥有的表。
  • @BriteSponge,错误的结果。
  • 你检查过表的所有者吗?是正确的吗? bcz 您正在使用 all_ 视图,这可以是来自不同架构的表

标签: sql oracle sqldatatypes tablecolumn database-metadata


【解决方案1】:

需要添加列名连接:

SELECT all_tab.column_name,
       all_tab.data_type,
       all_tab.data_length,
       (SELECT COMMENTS
          FROM user_col_comments t
         where t.TABLE_NAME = all_tab.TABLE_NAME
           and t.COLUMN_NAME = all_tab.column_name)
  FROM all_tab_columns all_tab
 WHERE all_tab.TABLE_NAME = 'MY_TABLE'

【讨论】:

    【解决方案2】:

    USER_ 视图显示有关对象(在这种情况下为表)的信息,这些对象由您连接的架构用户所拥有。 ALL_ 视图显示与连接的架构用户有权查看的对象相关的信息。

    如果您只对架构所有者创建的对象感兴趣,那么请务必使用 USER_ 视图。

    但是,你可能想要;

    SELECT all_tab.owner,
           all_tab.table_name,
           all_tab.column_name,
           all_tab.data_type,
           all_tab.data_length,
           col_com.comments
    FROM   all_tab_columns all_tab
           JOIN all_col_comments col_com
              ON  all_tab.table_name = col_com.table_name
              AND all_tab.owner = col_com.owner
    WHERE  all_tab.table_name = 'MY_TABLE'
    

    这当然对我有用,但您可能还想考虑检索 DATA_PRECISION 和 DATA_SCALE

    【讨论】:

    • @AlexanderYau - 鉴于这对我有用,您是否认为简单地重复它显示错误的结果可以提供有关问题可能是什么的任何信息。你以谁的身份登录,谁拥有你感兴趣的表,结果有什么问题,错误的列,错误的表。你实际期望看到的怎么样。试着想象走到一位忙碌的同事面前,向他们展示查询并说“错误的结果”。你的同事会怎么说?
    • 你的脚本很好,但它只是重复结果,当列的长度很大时很烦人,我必须花一些时间来处理这些重复的结果。抱歉,我没有同事,我是 Oracle 的新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多