【问题标题】:Get Columns Names of Table获取表的列名
【发布时间】:2015-10-04 06:11:39
【问题描述】:

我怎样才能为一个特定的表获取它的列名称? 我试过这个:

SELECT  column_name
FROM USER_TAB_COLUMNS
WHERE table_name = 'x' ;

但它不起作用

【问题讨论】:

  • 你想说什么?
  • 我有表名,我想得到它的列。
  • 在Query中输入你的表名,选择表名并按“ALT+F1”
  • 您是否尝试过解决这个问题?如果你有,请在你的问题中包含你的代码和研究,以显示什么对你不起作用。如果没有,您应该先尝试自己解决它,然后在此处发布代码和研究。它也让其他人更容易回答您的问题!

标签: sql oracle


【解决方案1】:

试试这个:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'TABLENAME'

希望这会有所帮助。

编辑:

information_schema.COLUMNS 的 Oracle 等效项对于当前用户拥有的表是 USER_TAB_COLS,对于所有用户拥有的表是 ALL_TAB_COLS 或 DBA_TAB_COLS。

表空间不等同于模式,您也不必提供表空间名称。

如果您想查询 ALL_TAB_COLS 或 DBA_TAB_COLS 以获取特定用户拥有的表的列,则提供架构/用户名将很有用。在你的情况下,我想查询看起来像:

String sqlStr= "
SELECT column_name
FROM   all_tab_cols
WHERE  table_name = 'users'
       AND owner = ' || +_db+ || '
       AND column_name NOT IN ( 'password', 'version', 'id' ) 
"

请注意,使用这种方法可能会导致 SQL 注入。

来源:Oracle query to fetch column names

【讨论】:

  • 数据库是 Oracle 而不是 MSSQL。
  • @StefanYordanov ,我已经更新了答案以包含 Oracle。
【解决方案2】:

Oracle中的字符串比较默认区分大小写,表名和列名默认大写,所以你需要确保你要搜索的表名的大小写与它在数据库中的存储方式相匹配, 所以除非你的表被命名为混合大小写或全部小写尝试确保你的字符串都是大写的。

SELECT column_name from USER_TAB_COLUMNS
 WHERE table_name = 'X'; -- not 'x'

此外,如果您不拥有该表,那么您需要使用 ALL_TAB_COLUMNS 或 DBA_TAB_COLUMNS 而不是 USER_TAB_COLUMNS,因为 USER_TAB_COLUMNS 仅列出您当前架构拥有的表的详细信息。

【讨论】:

    【解决方案3】:

    你可以只描述表格:

    desc x;
    

    【讨论】:

      【解决方案4】:

      尝试查询USER_TAB_COLUMNS查看

      SELECT  column_name
      FROM USER_TAB_COLUMNS
      WHERE table_name = 'TABLE_NAME'
      

      【讨论】:

      • 添加了一个示例查询。
      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 2011-04-16
      • 2011-07-22
      • 2013-05-15
      • 1970-01-01
      • 2014-04-12
      • 2011-12-03
      相关资源
      最近更新 更多