【问题标题】:Comma separated list of column names of a table逗号分隔的表的列名列表
【发布时间】:2023-03-26 21:50:01
【问题描述】:

在给定表名的情况下,我无法获得逗号分隔的列名列表。任何参考都表示赞赏。

所以我的最终结果应该是 oracle 中的一条 sql 语句,它在运行时会给我一个逗号分隔的给定表中的列名列表。 (这样我就可以将列表复制粘贴到其他地方)

编辑:

所以如果我的表是这样的: table1(fieidl1,field2,field3)

我正在寻找像“field1,field2,field3”这样的字符串

所以我可以插入一个单独的 sql 语句以按顺序从表中选择字段。

【问题讨论】:

  • 你试过SET COLSEP ,吗?
  • 最好提到数据库版本。 LISTAGG 等功能适用于 11g 及以上版本。

标签: oracle


【解决方案1】:

SELECT RTRIM(XMLAGG(XMLELEMENT(E,COLUMN_NAME,',').EXTRACT('//text()') ORDER BY COLUMN_NAME).GetClobVal(),',')
FROM USER_TAB_COLS WHERE TABLE_NAME = 'YOUR_TABLE_NAME'

【讨论】:

    【解决方案2】:

    我的这个解决方案也适用于旧版本的 oracle。:)

    with a as (
    select rownum r,column_name from cols where table_name ='TableName')
    ,b as (
    select SYS_CONNECT_BY_PATH(column_name, ',') Fields,rownum rn from a
    start with r=1
    CONNECT BY PRIOR r = r-1 ),c as (
    select * from b order by 2 desc) select Fields from c where rownum =1
    

    【讨论】:

      【解决方案3】:
      select wm_concat(COLUMN_NAME) 
      from ALL_TAB_COLUMNS 
      where TABLE_NAME='MyTable';
      

      【讨论】:

        【解决方案4】:

        您可以像这样使用来自 oracle 字典的USER_TAB_COLSLISTAGG

        SELECT LISTAGG (COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) 
        FROM USER_TAB_COLS WHERE TABLE_NAME = 'YOUR_TABLE'
        

        【讨论】:

        • LISTAGG 适用于 11g 及以上版本。最好提一下 DB 版本。
        【解决方案5】:

        我假设您尝试以 *.csv 格式导出查询。如果是这样,您可以使用SPOOL 命令来执行此操作。

        SPOOL "C:\file\location\...\file.csv"
        SELECT /*csv*/ * from your_table_name;
        SPOOL OFF;
        

        如需更多信息,请查看here 示例。更多examples

        【讨论】:

        • 我只查找列名,而不是表内容。我对移植到 excel 文件不感兴趣。我只需要一个逗号分隔的列列表。 information_schema.columns 等效的某种按摩,因此可以将列的结果集制成单行,逗号分隔
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 2011-08-13
        相关资源
        最近更新 更多